从编辑器中捕获未处理的异常
Catch unhandled exceptions from editor
我们在 WPF 应用程序 (MVVM) 中使用 MEF 来嵌入外部编辑器。在我们的主视图中的某个点有一个内容元素,编辑器将被放置在其中。
现在我们想从该编辑器中捕获任何未处理的异常,然后重新加载编辑器。我发现的唯一一件事是使用 Application
class 中的 DispatcherUnhandledException
。从那里我将不得不以某种方式到达主视图编辑器并告诉它重新加载崩溃的编辑器。
我想知道是否有一个 "lower" 水平点,我可以在哪里捕获异常?有没有人有这方面的经验可以帮助他?
谢谢
所以我的回答是:如果可以,最好不要这样做。当您遇到未处理的异常时,您的应用程序不再处于稳定状态。您具体要恢复到哪里?如果您的外部编辑器抛出损坏状态异常(例如 Win32 SEH 异常),如 AccessViolationException
或 OutOfMemoryException
怎么办?您的整个应用此时可能处于未确定状态,因此进一步执行可能会导致数据丢失 and/or 损坏。此外,CLR 可能无法保证您的应用程序可以继续:
SEH exceptions are a different class from those exceptions raised by
your program. A program might raise an exception because it tried to
pop an item from an empty stack or tried to open a file that didn't
exist. All of these exceptions make sense in the context of your
program's execution. SEH exceptions refer to a context outside of your
program. Unlike program errors, an SEH exception indicates that the
integrity of the runtime's process may have been compromised.
请阅读 SEH and CLR exceptions here。
这不是我建议您做的,而是供您参考:您可以通过更新 app.config[= 来阻止您的应用在捕获未处理的异常后关闭24=] 文件:
<runtime>
<!-- the following setting prevents the host from closing when an unhandled exception is thrown -->
<legacyUnhandledExceptionPolicy enabled="1" />
</runtime>
但是,正如 Microsoft 所说,如果忽略异常,应用程序可能会泄漏资源并放弃锁定。
我们在 WPF 应用程序 (MVVM) 中使用 MEF 来嵌入外部编辑器。在我们的主视图中的某个点有一个内容元素,编辑器将被放置在其中。
现在我们想从该编辑器中捕获任何未处理的异常,然后重新加载编辑器。我发现的唯一一件事是使用 Application
class 中的 DispatcherUnhandledException
。从那里我将不得不以某种方式到达主视图编辑器并告诉它重新加载崩溃的编辑器。
我想知道是否有一个 "lower" 水平点,我可以在哪里捕获异常?有没有人有这方面的经验可以帮助他?
谢谢
所以我的回答是:如果可以,最好不要这样做。当您遇到未处理的异常时,您的应用程序不再处于稳定状态。您具体要恢复到哪里?如果您的外部编辑器抛出损坏状态异常(例如 Win32 SEH 异常),如 AccessViolationException
或 OutOfMemoryException
怎么办?您的整个应用此时可能处于未确定状态,因此进一步执行可能会导致数据丢失 and/or 损坏。此外,CLR 可能无法保证您的应用程序可以继续:
SEH exceptions are a different class from those exceptions raised by your program. A program might raise an exception because it tried to pop an item from an empty stack or tried to open a file that didn't exist. All of these exceptions make sense in the context of your program's execution. SEH exceptions refer to a context outside of your program. Unlike program errors, an SEH exception indicates that the integrity of the runtime's process may have been compromised.
请阅读 SEH and CLR exceptions here。
这不是我建议您做的,而是供您参考:您可以通过更新 app.config[= 来阻止您的应用在捕获未处理的异常后关闭24=] 文件:
<runtime>
<!-- the following setting prevents the host from closing when an unhandled exception is thrown -->
<legacyUnhandledExceptionPolicy enabled="1" />
</runtime>
但是,正如 Microsoft 所说,如果忽略异常,应用程序可能会泄漏资源并放弃锁定。