如何在Silverlight中捕获AccessViolationException?

时间:2011-01-05 17:28:56

标签: .net silverlight shutdown

当我们的(Out Of Browser)Silverlight应用程序被用户关闭时,我们有时会在尝试写入日志文件时(在单独的线程上)获得AccessViolationException。似乎Silverlight运行时正在关闭,并且不期望在关闭序列期间发生IO操作。

尝试捕获AccessViolationException并忽略它似乎不起作用,即使该方法使用HandleProcessCorruptedStateExceptions进行修饰,以捕获表示真正讨厌错误的异常和其他异常。

是否有更强大的方法来捕获异常或至少将其隐藏起来?

1 个答案:

答案 0 :(得分:0)

我遇到了一个非常相似的情况。当用户退出应用程序时,将抛出AccessViolationException。原因是我的代码仍然在后台线程上工作,并且该代码将记录(使用NLog)。

最终,当Silverlight运行时关闭导致错误时,NLog会尝试创建FileStream。

如果在visual studio(ctrl + alt + e)中抛出异常时打开break,则有助于精确定位。

一旦我解决了这个问题,我必须确保在允许应用程序退出之前停止所有后台线程。这对我来说并不算太糟糕,因为我使用的是MEF,我只需要处理容器并在需要的地方实现IDisposable。