标题就是这样的。WPF应用程序,带有一些用于IPC的WCF东西。我调用了Application.Current.Shutdown(),应用程序愉快地继续运行。我以为Shutdown应该是不可阻挡的。
也许是因为它是从后台线程调用的?我需要做一些调度器的摆弄吗?
发布于 2009-12-09 00:47:24
当我在主线程以外的任何线程中调用Application.Current.Shutdown时,你会得到一个异常,所以我假设你已经正确地使用了"dispatcher fiddling“。
在任何情况下,这都会编译并退出应用程序,因此如果dispatcher位看起来不像您所拥有的那样,您可以将其抛入:
ThreadStart ts = delegate()
{
Dispatcher.BeginInvoke((Action)delegate()
{
Application.Current.Shutdown();
});
};
Thread t = new Thread(ts);
t.Start();发布于 2009-12-08 22:52:00
根据我的经验,所有线程都必须显式终止,或者被标记为后台线程才能关闭应用程序。
下面是一个在后台启动读取线程的示例:
_readThread = new Thread(new ThreadStart(ReadThread));
_readThread.Name = "Receiver";
_readThread.Priority = ThreadPriority.Highest;
_readThread.IsBackground = true;
_readThread.Start();IsBackground属性是关键。如果没有设置,当你调用Shutdown时,线程不会终止。
发布于 2015-07-07 09:25:03
只有当我在Visual Studio中运行时,我才会发现Application.Current.Shutdown无法工作。在Visual Studio中(至少是我使用的2010版本),Application.Current.Shutdown什么也做不了。如果我单步执行,它将执行此行,然后继续。如果我从Windows Explorer运行该程序(作为.exe),那么Application.Current.Shutdown工作得很好。
这可能有一个解释,因为在调试期间其他线程是活动的,但我不能解释它。
https://stackoverflow.com/questions/1867380
复制相似问题