我有一個C#2.0應用程序啓動Crystal Reports查看器並顯示一些報告。如果我在Visual Studio的Debug或Release模式下運行它,它運行良好。如果我通過Visual Studio 2005進行調試,那麼報告會彈出,但是稍後一兩分鐘VS就會在ContextSwitchDeadlock上出現異常,並告訴我任何調用堆棧幀都沒有加載符號,因此我無法調試它。Crystal報告崩潰的視覺工作室
這可能與報告在另一個線程上啓動的事實有關。其原因有點複雜,但我會嘗試解釋以防萬一它很重要:
我們有一個運行在後臺線程上的長時間運行的進程。當這個過程完成後,它會啓動報告。如果它(後臺線程)在報表查看器窗體上調用Show(非模態),它將立即終止並終止所有報表。因此,它會爲每個報告啓動一個子線程並使用ShowDialog(模態)調用它。那樣的話,表單看起來對彼此來說都是非模態的,但是當用戶關閉最後一個時,後臺進程線程現在沒有子線程並且可以終止。
這是否有道理,有沒有人有任何想法,爲什麼我會得到VS內的ContextSwitchDeadlock MDA,但是當代碼獨立運行時不會引發異常?