当用户从文件菜单中单击退出菜单项时,应该如何退出应用程序?

我试过:

this.Dispose();
this.Exit();
Application.ShutDown();
Application.Exit();
Application.Dispose();

还有很多其他的。没有什么工作。


当前回答

Caliburn微调味

public class CloseAppResult : CancelResult
{
    public override void Execute(CoroutineExecutionContext context)
    {
        Application.Current.Shutdown();
        base.Execute(context);
    }
}

public class CancelResult : Result
{
    public override void Execute(CoroutineExecutionContext context)
    {
        OnCompleted(this, new ResultCompletionEventArgs { WasCancelled = true });
    }
}

其他回答

不应该有Application.ShutDown();或. exit()消息。

Application是一个静态类。它不指向当前应用程序。 你需要进入当前应用程序,然后像这样关闭它:

Application.Current.Shutdown();

根据我的理解,Application.Current.Shutdown()也有它的缺点。

如果你想显示一个确认窗口让用户确认是否退出,Application.Current.Shutdown()是不可逆的。

如果你使用application . current . shutdown()来退出应用程序,你可能会得到一个System. current . shutdown()。调用线程不能访问该对象,因为它属于另一个线程。如果从不同的线程调用它。要解决这个问题,您可以像这样包装调用

Application.Current.Dispatcher.Invoke(() => Application.Current.Shutdown());

App.Current.Shutdown (); 把它写在你需要的地方。

要退出应用程序,您可以调用

System.Windows.Application.Current.Shutdown();

如应用程序文档中所述。你也可以通过指定ShutdownMode来修改应用程序的关机行为:

在以下情况下,Windows Presentation Foundation (WPF)会隐式调用Shutdown: 当ShutdownMode设置为OnLastWindowClose时。 当关机模式设置为OnMainWindowClose时。 当用户结束会话,而SessionEnding事件未被处理或在未取消的情况下被处理时。

请注意Application.Current.Shutdown();只能从创建Application对象的线程调用,即通常是主线程。