C# 从WinForms中调用的方法内引发的异常中获取外部异常的任何解决方法?

C# 从WinForms中调用的方法内引发的异常中获取外部异常的任何解决方法?,c#,.net,winforms,exception,C#,.net,Winforms,Exception,在Windows窗体中,当调用Control.Invoke或Control.BeginInvoke引发异常并且该异常未被任何catch块处理时,可由控件或应用程序级处理程序通过Windows.Forms.application.ThreadException事件处理该异常。它的处理程序接受一个带有属性异常的EventArgs,该属性是引发的异常。但是,在引擎盖下,Windows.Forms.Control(不希望的)会剥离除最内部的例外之外的所有内容 也可以在上面找到,但它不建议任何解决方法 (

在Windows窗体中,当调用
Control.Invoke
Control.BeginInvoke
引发异常并且该异常未被任何catch块处理时,可由控件或应用程序级处理程序通过
Windows.Forms.application.ThreadException
事件处理该异常。它的处理程序接受一个带有属性
异常的
EventArgs
,该属性是引发的异常。但是,在引擎盖下,Windows.Forms.Control(不希望的)会剥离除最内部的例外之外的所有内容

也可以在上面找到,但它不建议任何解决方法

(这目前导致我在错误日志中得到一个无关紧要的堆栈跟踪——一个堆栈跟踪,它告诉我的最内部细节,但没有提到调用代码,也没有办法找出此类错误的代码位置。)

有解决办法吗是否有任何方法可以获取我的应用程序事件处理程序中的所有外部异常(记录意外异常以进行故障排除)


我发现的唯一建议似乎是将它的一些信息放入
Exception.Data
,也许是在一个新的异常中——但是如果我知道导致异常的外部代码,我可以修复这个错误,而不是记录它。相反,我如何在全局范围内做到这一点,而不在每个候选代码块周围包装一个try-catch?

看看这是否有帮助,谢谢,但我认为这不适用,因为我说的是WinForms消息循环调用,而不是普通的方法。Invoke。WinForms循环介入并丢弃所有外部异常,然后仅在主线程中重新引用最内部的异常。我将进行编辑以澄清。更改所有调用Control.Invoke的代码以调用您编写的静态实用程序方法是否切实可行?然后你可以把try/catch放在那里。遗憾的是,它仍然需要调用control.invoke,它会吃掉外部异常,所以我看不出这有什么帮助。