7

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

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

4

3 回答 3

12

当我调用除主线程之外的任何线程时,您会遇到异常Application.Current.Shutdown,因此我假设您已经正确使用“调度程序摆弄”。

在任何情况下,这都会编译并退出应用程序,因此如果调度程序位看起来不像您所拥有的,您可以将其放入:

ThreadStart ts = delegate()
    {
        Dispatcher.BeginInvoke((Action)delegate()
        {
            Application.Current.Shutdown();
        });
     };
 Thread t = new Thread(ts);
 t.Start();
于 2009-12-08T16:47:24.420 回答
11

根据我的经验,所有线程都必须显式终止或标记为后台线程才能关闭应用程序。

这是在后台启动读取线程的示例:

_readThread = new Thread(new ThreadStart(ReadThread));
_readThread.Name = "Receiver";
_readThread.Priority = ThreadPriority.Highest;
_readThread.IsBackground = true;
_readThread.Start();

IsBackground财产是关键。如果没有设置,当您调用 Shutdown 时,线程不会终止。

于 2009-12-08T14:51:59.917 回答
2

我只Application.Current.Shutdown在从 Visual Studio 运行时遇到不工作。在 Visual Studio(至少我正在使用的 2010 版本)Application.Current.Shutdown内没有任何作用。如果我单步执行它会执行此行然后继续。如果我从 Windows 资源管理器运行程序(作为 .exe),那么Application.Current.Shutdown工作正常。

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

于 2015-07-07T01:25:03.140 回答