首先,我有一个WPF应用程序,它是一个GUI前端,与遗留的Win32应用程序进行交互。遗留应用程序在单独的线程中作为DLL运行。用户在UI中选择的命令在“遗留线程”上调用。
如果“遗留线程”完成,GUI前端就不能再执行任何有用的操作,因此我需要关闭WPF应用程序。因此,在线程方法结束时,我调用 Application.Current.Shutdown()
。
由于我不在主线程上,所以需要调用此命令。但是,我注意到Dispatcher也有BeginInvokeShutdown()
来关闭dispatcher。那么我的问题是:调用两者之间有什么区别?
Application.Current.Shutdown();
并调用
Application.Current.Dispatcher.BeginInvokeShutdown();
Thread t = new Thread(new ThreadStart(delegate() { Thread.Sleep(50000); })); t.Start(); Application.Current.Dispatcher .BeginInvokeShutdown(System.Windows.Threading.DispatcherPriority.Normal);
。Dispatcher关闭了它的所有者线程并关闭了窗口,但没有终止后台线程。 - JustABill