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

我试过:

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

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


当前回答

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

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

其他回答

正如wuminqi所说,Application.Current.Shutdown();是不可逆的,我相信它通常用于强制应用程序关闭时,如当用户注销或关闭Windows。

相反,在主窗口中调用this.close()。这与在窗口上按Alt + F4或关闭[x]按钮相同。这将导致所有其他拥有的窗口关闭,并最终调用Application.Current.Shutdown();只要近距离行动没有取消。请参阅MSDN文档关闭窗口。

此外,由于this.close()是可取消的,您可以在关闭事件处理程序中放入一个保存更改确认对话框。简单地为<Window Closing="…>和更改e。(有关如何做到这一点的详细信息,请参阅MSDN文档。)

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

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

根据需要使用以下任何一种方法:

1.

 App.Current.Shutdown();
OR
 Application.Current.Shutdown();

2.

 App.Current.MainWindow.Close();
OR
 Application.Current.MainWindow.Close();

以上所有的方法都会调用Window类的关闭事件,并且执行可能会在某个时候停止(因为通常应用程序会设置像'are you sure?或“关闭前要保存数据吗?”,在窗口完全关闭之前)

3.但如果您想立即终止应用程序而不发出任何警告。使用下面的

Environment.Exit(0);

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

另一种方法是:

System.Diagnostics.Process.GetCurrentProcess().Kill();

这将强制终止应用程序。它总是有效的,即使在多线程应用程序中也是如此。

注意:注意不要在另一个线程中丢失未保存的数据。