我有一個長期的C#.NET 3.5應用程序「凍結」,我很茫然。有兩個C#可執行文件。一個有完整的UI,另一個作爲托盤應用程序運行。他們都通過WCF與第三個服務應用進行通信,該應用也在托盤中運行。調試阻塞的Windows消息循環的想法
隨機主Winforms應用程序的UI線程將死鎖。神祕的是,如果我退出托盤應用程序,這個應用程序的用戶界面將解鎖。
每當我將調試器連接到任一應用程序時,我什麼都不會有用。 UI線程在Application.Run方法的凍結應用程序中被阻止。所有其他線程或者正在休眠,或者在調用UI線程時被阻塞。
神祕地另一個像Photoshop一樣運行的應用程序會表現出奇怪的行爲,而這種僵局已經到位。退出托盤應用也會對此進行分類。
我可以推論的是,主要的Windows級別的消息泵出了問題,但我並不真正瞭解如何進一步調試。我已經安裝了框架源代碼,可以看到膠着應用是停留在一個while循環中:
Application.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop
,但真的不知道夠做任何事此信息。
有沒有人有任何建議在哪裏看得更遠?我一直在追逐這個隨機的僵局錯誤數月。
感謝, 尼克
該問題可能與WCF有關。你如何主辦服務?你使用雙工通信嗎? – 2010-10-12 12:16:25
是的,我們正在使用雙工WCF。我們剛剛將代碼移植到了.NET 4中,但仍然看到了這個問題,儘管不太經常。 隨着WCF我做一些事情,使每個連接都有它自己的實例: [ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple,UseSynchronizationContext =假,InstanceContextMode = InstanceContextMode.PerSession)] 和回調普遍得到放入排隊系統,所以他們不應該阻止。即使沒有發生回調或服務調用,這個問題似乎也會發生,除了可能每5分鐘發生一次「保持活躍」的Ping。 – Mocl 2010-11-02 10:12:08