关于这个问题,标题已经说得很清楚了。这是一个涉及到WCF的WPF应用程序中的IPC问题。我调用了Application.Current.Shutdown()
方法,但是应用程序却继续运行。我原本以为Shutdown
应该是不可阻止的。
可能是因为它是从后台线程调用的?我需要进行一些调度器操作吗?
关于这个问题,标题已经说得很清楚了。这是一个涉及到WCF的WPF应用程序中的IPC问题。我调用了Application.Current.Shutdown()
方法,但是应用程序却继续运行。我原本以为Shutdown
应该是不可阻止的。
可能是因为它是从后台线程调用的?我需要进行一些调度器操作吗?
在主线程以外的任何线程调用Application.Current.Shutdown
时会出现异常,因此我认为您已经正确使用了“dispatcher fiddling”。
无论如何,这将编译并退出应用程序,因此如果调度程序位不像您所拥有的那样,您可以将其扔进去:
ThreadStart ts = delegate()
{
Dispatcher.BeginInvoke((Action)delegate()
{
Application.Current.Shutdown();
});
};
Thread t = new Thread(ts);
t.Start();
根据我的经验,所有的线程要么明确地被终止,要么被标记为后台线程,以便应用程序能够关闭。
以下是在后台启动读取线程的示例:
_readThread = new Thread(new ThreadStart(ReadThread));
_readThread.Name = "Receiver";
_readThread.Priority = ThreadPriority.Highest;
_readThread.IsBackground = true;
_readThread.Start();
IsBackground
属性是关键。如果没有设置它,线程在调用Shutdown时不会终止。
我只遇到过在Visual Studio中运行时Application.Current.Shutdown
无法正常工作的情况。至少在我使用的2010版本中,Application.Current.Shutdown
没有任何作用。如果我单步执行它,它会执行此行,然后继续执行。如果我从Windows资源管理器中作为.exe文件运行程序,则Application.Current.Shutdown
可以正常工作。
这可能有一个解释,因为在调试期间其他线程是活动的,但我无法解释。