繁体   English   中英

如何在非UI线程上调用Application.Exit

[英]How to call Application.Exit on an non UI Thread

我有一个UI设计问题。

当它在非UI线程上遇到异常时,我想退出该应用程序。

基本上,事件是这样的:

主窗体->子WinForm的ShowDialog(MainThread)->启动后台线程(WorkerThread)->发生异常->显示错误窗体(WorkerThread)

当用户单击ErrorForm上的“退出”按钮时,我要退出整个应用程序。 但是,执行以下调用不起作用。

Invoker.Invoke((Action)(() => { Application.Exit(); }), null);

Invoker对主要形式SynchronizedContext的引用。 但是,由于MainThread仍在等待subWinForm返回其控件,因此它可能无法处理Application.Exit()。

有什么更好的设计来处理后台工作线程引发的异常?

取消后台工作程序,然后将参数发送给BackgroundWorker RunWorkerCompletedEvent,以识别是否存在异常。 之后,从那里调用Application.Exit()就可以了。

我知道在Silverlight中可以像这样进行调用:

Dispatcher.BeginInvoke(() => Application.Exit());

或者,如果您的WinForms类没有Dispatcher

Invoker.BeginInvoke(() => Application.Exit());

您有很多多余的代码( (Action)null ,不必要的括号和括号)。 我认为它不会阻止它正常工作,但是无论如何,这样阅读起来会更容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM