2011-06-27 21 views
1

我正在開發一個C#Web客戶端應用程序,它從Web服務器接收內容並在成功驗證後使用brower對象顯示它。理想情況下,當應用程序退出並需要取消訂閱網絡連接時,我們應該調用IConnectionPoint的方法Unadvise(cookie)。但是,當任何web異常被拋出並且應用程序需要關閉時,應用程序沒有響應,並且無法退出。當我評論方法Unadvise(cookie)它工作正常,應用程序正在退出成功。C#.net應用程序在拋出web異常和unadvise後不能退出()

有沒有辦法解決這個問題沒有評論Unadvise(cookie)? 。

+0

如果我不叫Unadvise(cookie)atall,會不會有任何副作用?每當我們調用Advise和Unadvise()函數時,我都會在某個地方讀到接口的引用指針保持在系統中。如果我們不調用Unadvise(),那麼引用指針會發生什麼? – Himanshu

回答

0

我想你可以使用多線程 - 隔離線程來調用unadvise,你可以在超時時關閉它。

+0

感謝您的回覆。我一定會嘗試這個。你能告訴我,如果我不打電話給Unadvise(cookie),會不會有任何副作用?每當我們調用Advise()和Unadvise()時,我都會在某個地方讀到系統維護接口的引用指針。如果我們不調用Unadvise(),那麼參考指針會發生什麼? – Himanshu

+0

@Himanshu:如果你不叫'Unadvise',你基本上仍然連接並可能接聽電話。如果處理這些調用的代碼無法處理這些調用,那麼您的應用程序可能會崩潰。試圖在不瞭解COM線程模型的情況下引入多線程而不是通過接口規則進行播放並不能解決您的問題。 –

+0

@Martin:謝謝你的回覆。 – Himanshu

0

這可能是一個公寓的問題。我在這裏猜測,但如果實現IConnectionPoint的對象是在STA中,並且想要回調由您的代碼實現的另一個接口,並且您的代碼不處理消息循環(即,如果您的線程處於默認的MTA .NET 2.0和轉發),然後回調到您的代碼掛起。

根據您的代碼的線程模型和您使用的對象,您可以嘗試將STAThread應用到您的主要方法。