2011-12-07 88 views
6

當我運行我的應用程序後一些發生此例外發生。什麼是例外,我該如何處理這個異常上下文切換死鎖

的CLR一直無法從COM上下文0x647f10過渡到COM 方面0x648080 60秒。擁有目的地 上下文/公寓的線程很可能要麼執行非抽取等待,要麼處理非常長的運行操作而不抽取Windows 消息。這種情況通常會對性能產生負面影響,並且甚至可能導致應用程序變得無法響應,或者內存使用量持續不斷地累積。爲了避免這個問題,所有的 單線程單元(STA)線程都應該使用等待原語(比如CoWaitForMultipleHandles)並且在長時間運行操作期間例行地泵送消息。

+8

閱讀每個單詞的文字大寫是煩人的 –

+0

發生了什麼事情的描述都在那裏,雖然它可能有點不清楚你是如何觸發它的。要獲得幫助,您需要更具體地瞭解您的應用程序的功能以及它的構建方式。 –

+0

我使用通用算法處理Sudoku並且可能需要很多時間才能找到答案併發生此異常。 –

回答

8

如果您有阻塞您的用戶界面線程並且正在使用COM組件的情況,通常會發生這種情況。

這裏最好的辦法是將長時間運行的操作移動到後臺線程中。這使您的UI響應,這也意味着COM消息可以正確泵送。 BackgroundWorker是一個很好的工具。

0

根據我的經驗,這是在Windows窗體的主線程中執行長時間運行任務的結果。考慮使用BackgroundWorker來代替運行該任務。這樣做的直接好處是您的UI在任務運行時不會凍結。您甚至可以考慮使用ProgressChanged事件實施進度欄。