2009-05-01 57 views
3

我的應用程序一般在10-20個線程上運行,並且這些線程幾乎每秒都會向GUI發送事件以更新某些控件。在進程關閉期間處理ObjectDisposedException和類似異常?

當用戶關閉這些應用程序的中間時,與這些事件相關的所有更新都會導致多次隨機崩潰。主要是ObjectDisposedExceptionNullReferenceException

由於事件已經拋出,但尚未由.NET Framework處理,它們不處於可以取消它們的狀態。

我不太清楚處理這個問題的最佳方法。目前,我只是將異常吞噬了異常。

回答

4

有幾個選項:

  • ,當應用程序開始閉合(?FormClosing),你可以開始(通過標誌的地方)乾淨地退出線程
  • 大概跟你的UI,你正在募集由UI處理的事件(處理同步等) - 保留一個標誌,並且(如果這樣做是安全的話)在標誌已經設置的情況下簡單地刪除事件(再次因爲你正在退出)
  • 當退出,有UI取消訂閱事件
1

除了Marc Gravell's suggestions,這裏的一些事情:

  • 在任何時候,你可以做任何事情。如果你所訪問的所有窗口的形式,可能會導致ObjectDisposed例外
  • 前檢查Environment.HasShutdownStarted,你可以檢查.IsDisposed(所有窗體和控件都有)
+0

我不知道Environment.HasShutdownStarted聽起來很有希望,我已經實現了FormClosing標誌,但下次我會記住這一點。儘管測試修補程序是否正常工作,但問題仍然存在,但問題更大:)因爲獲取此錯誤有點困難。 – 2009-05-01 09:15:52