gpt4 book ai didi

.net - 如何在 Application.ThreadException 事件处理程序中获取整个异常链?

转载 作者:行者123 更新时间:2023-12-04 00:25:08 25 4
gpt4 key购买 nike

我刚刚在 .NET 2.0 应用程序中修复异常处理,我偶然发现了一些奇怪的问题 Application.ThreadException .

我想要的是能够从 GUI 元素(例如 button_Click 等)后面的事件中捕获所有异常。然后我想根据“致命性”过滤这些异常,例如对于某些类型的异常,应用程序应该继续运行,而对于其他类型,它应该退出。

在另一个 .NET 2.0 应用程序中,我了解到,默认情况下,只有在 Debug模式下,异常才会真正离开 Application.Run 或 Application.DoEvents 调用。在 Release模式下,这不会发生,并且必须使用 Application.ThreadException 事件“捕获”异常。

然而,现在我注意到 Application.ThreadException 事件的 ThreadExceptionEventArgs 中传递的异常对象始终是异常链中最内层的异常 .出于日志记录/调试/设计目的,我确实想要整个异常链。例如,当您刚刚处理 SocketException 时,确定哪个外部系统失败并不容易:当它被包装为例如时一个 NpgsqlException,那么至少你知道这是一个数据库问题。

那么,如何从这个事件中获取整个异常链呢? 甚至可能还是我需要以另一种方式设计我的异常处理?

请注意,我确实 - 有点 - 有一个 workaround使用 Application.SetUnhandledExceptionMode ,但这远非理想,因为我必须滚动自己的消息循环。

编辑:为了防止更多错误, GetBaseException() 方法没有做我想要的 :它只返回最里面的异常,而我唯一已经拥有的是最里面的异常。我想得到最外面的异常!

最佳答案

关于.net - 如何在 Application.ThreadException 事件处理程序中获取整个异常链?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com