Windows:未在主线程中处理异常

本文关键字:处理 异常 线程 Windows | 更新日期: 2023-09-27 18:23:58

在windows中是否可以忽略主线程中未处理的异常?

我知道操作系统希望停止主线程中出现未处理异常的进程。但是,为什么System.Threading.Timer任务的线程中未处理的异常会在Windows中产生"是否要打开调试器"对话框呢?

是的,你总是可以把整个任务包装在一个try/catch-all块中,但我觉得这很奇怪。

注意:我尝试了一个简单的命令行程序,它在Timer对象中有一个任务,会抛出一个异常(几秒钟后)——但似乎没有办法阻止Windows终止进程。

Windows:未在主线程中处理异常

如果您的胎面即使在异常发生后也能继续工作,那么全局try-catch包装就足够了。问题是,您的线程能够在发生异常后继续吗?这个例外对你的线程有多重要?如果这是至关重要的,你难道不想知道发生了什么吗?

如果您不知道异常是如何发生的,并且不想将孔代码封装到try-catch中,则可以使用UnhandledException处理程序来记录错误,以便将来更正。

下面是vb.net中的一个例子:

Dim currentDomain As AppDomain = AppDomain.CurrentDomain
AddHandler currentDomain.UnhandledException, AddressOf MyHandler

Sub MyHandler(ByVal sender As Object, ByVal args As UnhandledExceptionEventArgs)
    Dim e As Exception = DirectCast(args.ExceptionObject, Exception)
End Sub 'MyUnhandledExceptionEventHandler