我不做很多Windows GUI編程,所以這對於更熟悉WinForms的人來說可能都是我的常識。不幸的是我一直沒能找到任何資源來解釋這個問題,我今天在調試過程中遇到過。Control.EndInvoke重置調用堆棧異常
如果我們在異步委託上調用EndInvoke。在重新拋出方法的執行期間,我們將得到拋出的任何異常。調用堆棧將反映異常的原始來源。但是,如果我們在Windows.Forms.Control上執行類似操作,則Control.EndInvoke的實現將重置調用堆棧。這可以通過簡單的測試或通過查看Reflector中的代碼來觀察。從EndInvoke會相關的代碼摘錄是在這裏:
if (entry.exception != null)
{
throw entry.exception;
}
我明白,開始/ EndInvoke會在控制和異步委託是不同的,但我本來期望在Control.EndInvoke類似的行爲。
是否有任何理由控制不會做任何異步委託做保存原始調用堆棧?
我知道,但因爲我不是誰實施了一個Windows.Forms.Control它的幫助不大。 – 2010-05-13 22:09:44