我有一个C#WPF应用程序,它会抛出以下错误消息并崩溃:
System.AccessViolationException:尝试读取或写入受保护的 记忆。这通常表明其他内存已损坏。
然后我在代码中添加了以下异常处理程序。并且还在方法的开头添加了以下代码行,这些代码抛出异常。
throw new System.AccessViolationException();
异常处理程序现在在上面发生异常时单击本地计算机上的app exe时执行,但应用程序仍然崩溃。我需要能够阻止应用程序崩溃。不知道我该怎么做?
application.DispatcherUnhandledException += ApplicationDispatcherUnhandledException;
TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException;
AppDomain currentAppDomain = AppDomain.CurrentDomain;
currentAppDomain.UnhandledException += new UnhandledExceptionEventHandler
(UnhandledExceptionHandler);
感谢。
答案 0 :(得分:1)
您需要确定引发该异常的代码部分。我敢打赌这是一些外部的无人图书馆。
如果您无法修复该库,则可以按照MSDN上的说明进行操作:
AccessViolationException和try / catch blocks
从.NET Framework 4开始,AccessViolationException 公共语言运行库抛出的异常不由处理 如果异常,结构化异常处理程序中的catch语句 发生在公共语言运行库保留的内存之外。 要处理此类AccessViolationException异常,您应该应用 HandleProcessCorruptedStateExceptionsAttribute属性 抛出异常的方法。这种变化不会影响 用户代码抛出的AccessViolationException异常,可以 继续被捕获声明抓住。代码编写 您要重新编译的以前版本的.NET Framework 在.NET Framework 4上运行而不进行修改,您可以添加 元素到你的应用程序 配置文件。请注意,您还可以收到通知 例外,如果你已经为。定义了一个处理程序 AppDomain.FirstChanceException或AppDomain.UnhandledException事件。