是否可以在Windows中忽略主线程中未处理的异常?
我理解操作系统想要在主线程中停止一个带有未处理异常的进程。但为什么在为System.Threading.Timer任务生成的线程中未处理的异常会在Windows中生成“你想打开调试器”对话框吗?
是的,你总是可以将整个任务包装在try / catch-all块中,但我发现这很奇怪。
注意:我尝试了一个简单的命令行程序,它在Timer对象中有一个抛出异常的任务(几秒钟后) - 似乎仍无法阻止Windows终止进程。
答案 0 :(得分:1)
如果您的胎面即使在异常之后也可以继续工作,那么全局尝试捕获包裹就足够了。问题是,您的线程是否能够在异常后继续?你的线程的异常有多重要?如果重要的是,你不想知道发生了什么?
如果您不知道异常是如何发生的并且您不想将漏洞代码包装到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