2011-01-05 47 views
1

當我們的(瀏覽器外)Silverlight應用程序被用戶關閉時,我們有時會在嘗試寫入日誌文件(在單獨的線程上)時遇到AccessViolationException。看起來,Silverlight運行時正在關閉,並且不希望在關閉序列期間發生IO操作。如何在Silverlight中捕獲AccessViolationException?

試圖捕獲AccessViolationException並忽略它,即使該方法使用HandleProcessCorruptedStateExceptions裝飾以捕獲表示真正令人討厭的錯誤的異常和其他異常,也不會出現問題。

是否有一些更強大的方法來捕獲異常或至少隱藏它從用戶?

+0

您無法處理AV,線程已死亡。修復真正的問題。 – 2011-01-05 18:13:40

+1

@Hans,「真正的問題」是Silverlight。我不知道它在關機時做了什麼,但不管它是什麼 - 它不應該拋出這樣的討厭異常。 – SoftMemes 2011-01-06 09:44:08

+0

請你可以發佈你的代碼執行日誌?看起來你正在嘗試將日誌添加到已經打開的文件中。 – 2011-01-06 23:46:42

回答

0

我遇到了非常相似的情況。當用戶退出應用程序時,會拋出AccessViolationException。原因是我的代碼仍然在後臺線程上工作,並且代碼會記錄(使用NLog)。

最終,NLog在Silverlight運行時關閉時嘗試創建FileStream,導致錯誤。

如果您在Visual Studio中引發異常(ctrl + alt + e)時打開break,它有助於查明。

一旦我有這個想法解決我必須確保在允許應用程序退出之前停止所有後臺線程。這對我來說並不是太糟糕,因爲我使用的是MEF,我可以在需要時處理容器並實現IDisposable。

相關問題