1

如何進入TargetInvocationException?

即時得到TargetInvocationExceptions類型System.Reflection.TargetInvocationException的未處理的異常出現在mscorlib.dll
附加信息:異常已由 調用目標拋出。

因爲我打電話與

Dispatcher.Invoke(MyRoutine...) 

碼我怎樣才能讓VS 2010調試器步入MyRoutine到異常實際發生的地方???

我知道我可以建立一個嘗試......圍繞着Dispatcher.Invoke,然後看看內部的異常,但這非常費力。我想調試器停止發生錯誤的地方。

任何想法如何做到這一點?

回答

1

Dispatcher.Invoke()將設置一個catch塊,以便它可以將任何異常封送回調用它的線程。因此調用者知道Invoke()返回值不可用。這個catch塊可以防止調試器在拋出異常時自動中斷。原始異常作爲TargetInvocationException對象的InnerException提供。這可能足以診斷原因。

請考慮使用BeginInvoke()代替它,因爲調用它的代碼不再處於活動狀態,所以不需要進行這種編組。它也不太容易陷入僵局。

但是,如果您真的需要返回值,那麼只有Invoke()可以提供它。然後,調試異常的方法是使用Debug + Exceptions並針對CLR異常勾選Thrown複選框。這會強制調試器在拋出異常時停止。

+1

太棒了,漢斯!你解決了它!只是爲了澄清其他用戶:你可以在菜單Debug - > Exceptions ...下找到VS2010中的Exception-Window ... – Knasterbax 2013-04-30 16:21:46