我们在WPF应用程序(MVVM)中使用MEF来嵌入外部编辑器。在我们的主视图中的某个时刻,有一个内容元素,编辑器将被放置在其中。
现在我们要从该编辑器中捕获任何未处理的异常,然后重新加载编辑器。我发现的唯一一件事是使用DispatcherUnhandledException
类中的Application
。从那里我将不得不以某种方式到达主视图编辑器并告诉它重新加载崩溃的编辑器。
我想知道是否有一个“较低”的水平点,我可以捕捉异常?有没有人有这方面的经验,可以帮助他在这里?
由于
答案 0 :(得分:0)
所以我的回答是:如果你愿意的话,你最好不要这样做。当您收到未处理的异常时,您的应用不再处于稳定状态。你究竟要回到哪里?如果您的外部编辑器抛出了AccessViolationException
或OutOfMemoryException
的损坏状态异常(例如Win32 SEH异常),该怎么办?此时您的整个应用程序可能处于未确定状态,因此进一步执行可能会导致数据丢失和/或损坏。此外,CLR可能无法保证您的应用可以继续:
SEH例外与提出的例外不同 你的计划。程序可能会因为尝试而引发异常 从空堆栈弹出一个项目或尝试打开一个没有的文件 存在。所有这些例外在你的背景下都是有意义的 程序的执行。 SEH例外是指您之外的背景 程序。与程序错误不同,SEH异常表示该错误 运行时过程的完整性可能已经受到损害。
请阅读SEH and CLR exceptions here。
以下是我建议您不要做的事情,而是您的信息:您可以通过更新 app.config 文件来捕获未处理的异常,从而阻止您的应用关闭:
<runtime>
<!-- the following setting prevents the host from closing when an unhandled exception is thrown -->
<legacyUnhandledExceptionPolicy enabled="1" />
</runtime>
但是,正如微软所说,如果忽略异常,应用程序可能会泄漏资源并放弃锁定。