作为UI线程的托管线程上的未处理异常

时间:2015-12-03 20:21:44

标签: c# multithreading exception

我最近收到了一段(可怕的)代码要维护。其中一个问题是未处理的异常处理程序根本不起作用。我开始理解为什么,但它提出了我想要了解更多的问题。

简而言之,应用程序由具有STAThread属性的静态Main方法启动。在此线程上显示一个LoginScreen(在STAThread上)。当用户输入其凭据时,会创建另一个线程,从而启动实际的用户界面。因此,实际用户界面在托管线程上运行(其公寓状态设置为ApartmentState.STA)。

事件Application.ThreadExceptionAppDomain.CurrentDomain.UnhandledException的订阅在“真实”STAThread上设置,而实际用户界面在“不同”STA线程上运行。

我遇到的问题是未处理的异常被未处理的异常处理程序捕获。

当我在“不同的”STA线程上订阅上述事件时,未处理的异常处理程序会捕获未处理的异常

我之前从未意识到这一点(我也从未在不同的线程上运行用户界面,而不是“主”线程...),但是必须订阅Application.ThreadException(和/或{{ 1}})在实例化用户界面的相同线程上?或者调用AppDomain.CurrentAppDomain.UnhandledException的同一个线程?两者似乎都不太可能,但显然我应该订阅哪些线程限制事件。

我真的很感激这个特定主题的更多背景知识。

如果我没有意义,或者描述我的问题做得很差,请发表评论。

原始问题here

0 个答案:

没有答案