wpf - 如何同步关闭 WPF 应用程序?

标签 wpf multithreading application-shutdown

App.Current.Shutdown()异步工作。这意味着当您调用此方法时,您不 protected ,不会执行调用 Shutdown() 之后的代码行。

所以问题是如何阻止调用 App.Current.Shutdown() 的线程?

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        App.Current.Shutdown();

        File.WriteAllText(@"..\log.txt", "Info");    
    }
}

 private void App_OnExit(object sender, ExitEventArgs e) {
        Thread.Sleep(3500);
    }

File.WriteAll 将创建一个新文件并将“Info”字符串写入其中。

最佳答案

App.Current.Shutdown()根据文档没有异步工作:
http://msdn.microsoft.com/en-us/library/ms597013.aspx
Application.Current.Dispatcher.BeginInvokeShutdown()正在异步工作。

更新

我已经测试了你的代码。你说的对。以及有关 App.Current.Shutdown() 的文档具有误导性。 App.Current.Shutdown() 之后的代码在当前方法中将被执行。因此App.Current.Shutdown应该是 return 之前的最后一条语句(并且也尊重方法调用树)。

作为电话 Environment.Exit(0) 的替代方法但它可以被认为是诡计和黑客攻击,因为事实上它优雅地终止进程或不优雅地终止进程,而优雅地是不可能的。

关于wpf - 如何同步关闭 WPF 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16273214/

相关文章:

delphi - 是否有一个 Delphi 事件保证在应用程序终止时但在任何表单被销毁之前调用?

java - 我想通过java程序在关闭计算机之前检查打开的应用程序

c# - 清除wpf中的内存

c++ - my_thread_global_end 线程没有退出,错误?

delphi - 如何区分 UI 关闭和使用 Delphi 强制关闭

c++ 11 线程在 linux 和 windows 上的不同行为

java - tomcat多线程问题

c# - WPF - 组样式 : Can we only bind to the "Name" property?

c# - 在 wpf 中移动无边框窗口

c# - 使用 WPF 绘制家谱