2

我得到 TargetInvocationExceptions 之类的

在 mscorlib.dll 中发生 System.Reflection.TargetInvocationException 类型的未处理异常
附加信息:调用的目标已引发异常。

因为我正在调用代码

Dispatcher.Invoke(MyRoutine...)

如何让 VS 2010 调试器进入 MyRoutine 到实际发生异常的地方???

我知道我可以构建一个 try...catch Dispatcher.Invoke,然后查看内部异常,但这非常费力。我希望调试器在错误发生的地方停止。

任何想法如何做到这一点?

4

1 回答 1

2

Dispatcher.Invoke() 将设置一个 catch 块,以便它可以将任何异常编组回调用它的线程。以便调用者知道 Invoke() 返回值不可用。此 catch 块可防止调试器在引发异常时自动中断。原始异常作为 TargetInvocationException 对象的 InnerException 传递。这可能足以诊断原因。

请考虑改用 BeginInvoke(),它不需要执行这种封送处理,因为调用它的代码不再处于活动状态。它也不太容易出现死锁。

但是如果你真的需要返回值,那么只有 Invoke() 可以提供它。调试异常的方法是使用 Debug + Exceptions 并勾选 CLR 异常的 Thrown 复选框。这会在抛出异常时强制调试器停止。

于 2013-04-29T16:19:22.690 回答