如何进入TargetInvocationException?

时间:2013-04-29 13:26:33

标签: visual-studio-2010 debugging dispatcher targetinvocationexception

我得到像

这样的TargetInvocationExceptions
  

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

因为我用

调用代码
Dispatcher.Invoke(MyRoutine...)

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

我知道我可以试一试......抓住Dispatcher.Invoke然后看看内部异常,但这很费劲。我希望调试器停止发生错误的地方。

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

1 个答案:

答案 0 :(得分:2)

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

请考虑使用BeginInvoke(),它不需要执行此类封送,因为调用它的代码不再处于活动状态。它也不太容易陷入僵局。

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