2011-05-13 39 views
0

C#代碼從C++ dll檢索屬性值,並且此檢索會阻止當前線程,直到dll返回該值。在調試模式下,當檢索需要很長時間時,MDA會引發ContextDeadlockSwitch。在運行時檢測ContextDeadlockSwitch

我想在運行時不可能抓到ContextDeadlockSwitch,但是有沒有一種類似於MDA的機制可以拋出類似的異常,C#可以捕獲以檢測這種死鎖?

原因是讓C#代碼提示用戶要麼繼續等待幾秒鐘,要麼強行關閉並重新啓動應用程序。

回答

1

你可以在另一個線程中使用等待超時在 ManualResetEvent上執行對C++ dll的調用來表示完成;如果達到超時時間,您可以詢問用戶是否要繼續。請注意,如果DLL的COM對象位於STA中,那麼您可能需要在爲它保留的公寓中創建對象,並將其封送到對象中,以防止它在用戶午餐時凍結GUI線程。