标题是关于它的。 WPF应用程序,带有一些用于IPC的WCF内容。我致电Application.Current.Shutdown()
,应用程序继续愉快。我认为Shutdown
应该是不可阻挡的。
也许是因为它是从后台线程调用的?我是否需要做一些调度员摆弄?
答案 0 :(得分:12)
当我在主要线程之外的任何线程中调用Application.Current.Shutdown
时会出现异常,因此我假设您已经正确使用“调度程序”。
在任何情况下,这都会编译并退出一个应用程序,所以如果调度程序位看起来不像你所拥有的那样你可以将它放入:
ThreadStart ts = delegate()
{
Dispatcher.BeginInvoke((Action)delegate()
{
Application.Current.Shutdown();
});
};
Thread t = new Thread(ts);
t.Start();
答案 1 :(得分:10)
根据我的经验,所有线程都必须显式终止或标记为后台线程才能关闭应用程序。
以下是在后台启动读取线程的示例:
_readThread = new Thread(new ThreadStart(ReadThread));
_readThread.Name = "Receiver";
_readThread.Priority = ThreadPriority.Highest;
_readThread.IsBackground = true;
_readThread.Start();
IsBackground
属性是关键。如果没有设置,则在调用Shutdown时线程不会终止。
答案 2 :(得分:1)
当我从Visual Studio运行时,我只遇到Application.Current.Shutdown
无法正常工作。在Visual Studio中(至少我使用的2010版本)Application.Current.Shutdown
并没有做任何事情。如果我单步执行它执行此行然后继续。如果我从Windows资源管理器运行程序(作为.exe),那么Application.Current.Shutdown
工作正常。
可能有一个解释,因为在调试期间其他线程处于活动状态,但我无法解释它。