.net 如何在Silverlight中捕获AccessViolationException?

.net 如何在Silverlight中捕获AccessViolationException?,.net,silverlight,shutdown,.net,Silverlight,Shutdown,当用户关闭(浏览器外)Silverlight应用程序时,在尝试写入日志文件(在单独的线程上)时,有时会出现AccessViolationException。Silverlight运行时似乎正在关闭,并且不希望在关闭序列期间发生IO操作 尝试捕获AccessViolationException并忽略它似乎不起作用,即使该方法使用HandleProcessCorruptedStateExceptions进行修饰,以捕获该异常和表示严重错误的其他异常 是否有更强大的方法捕获异常或至少对用户隐藏异常?我

当用户关闭(浏览器外)Silverlight应用程序时,在尝试写入日志文件(在单独的线程上)时,有时会出现AccessViolationException。Silverlight运行时似乎正在关闭,并且不希望在关闭序列期间发生IO操作

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


是否有更强大的方法捕获异常或至少对用户隐藏异常?

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

最终,当silverlight运行时关闭时,NLog尝试创建文件流,这导致了错误

如果在VisualStudio中引发异常时启用“中断”(ctrl+alt+e),则有助于精确定位


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

你不能处理AV,线程已经死了。解决真正的问题。@Hans,“真正的问题”是Silverlight。我不确定它在关机时做了什么,但不管它是什么-它不应该抛出这样一个讨厌的异常。请发布执行日志记录的代码好吗?看起来您正试图将日志添加到一个已打开进行写入的文件中。@Igor,我们正在使用NLog,在应用程序的整个生命周期中记录到同一个文件中。(提升信任度,脱离浏览器,这允许我们在不提示用户的情况下写入特定位置的文件。)导致问题的日志调用与其他日志调用没有区别,只是在关机期间执行。