我得到像
这样的TargetInvocationExceptionsmscorlib.dll中发生System.Reflection.TargetInvocationException类型的未处理异常
附加信息:目标抛出异常 调用。
因为我用
调用代码Dispatcher.Invoke(MyRoutine...)
如何让VS 2010调试器进入MyRoutine步骤到实际发生异常的地方???
我知道我可以试一试......抓住Dispatcher.Invoke
然后看看内部异常,但这很费劲。我希望调试器停止发生错误的地方。
任何想法如何做到这一点?
答案 0 :(得分:2)
Dispatcher.Invoke()将设置一个catch块,以便它可以将任何异常封送回调用它的线程。这样调用者就知道Invoke()返回值不可用。此catch块可防止调试器在抛出异常时自动中断。原始异常作为TargetInvocationException对象的InnerException传递。哪个可能足以诊断原因。
请考虑使用BeginInvoke(),它不需要执行此类封送,因为调用它的代码不再处于活动状态。它也不太容易陷入僵局。
但是如果你真的需要返回值,那么只有Invoke()可以提供它。然后调试异常的方法是使用Debug + Exceptions并勾选CLR异常的Thrown复选框。这会强制调试器在抛出异常时停止。