Application.Current.Shutdown()没有

时间:2009-12-08 14:38:14

标签: wpf application-shutdown

标题是关于它的。 WPF应用程序,带有一些用于IPC的WCF内容。我致电Application.Current.Shutdown(),应用程序继续愉快。我认为Shutdown应该是不可阻挡的。

也许是因为它是从后台线程调用的?我是否需要做一些调度员摆弄?

3 个答案:

答案 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工作正常。

可能有一个解释,因为在调试期间其他线程处于活动状态,但我无法解释它。