当 anAppDomain
有未处理的异常时,您可以处理该AppDomain.CurrentDomain.UnhandledException
事件。
但是,您无法阻止AppDomain
关闭。你不能只是阻塞线程。最终 AppDomain 会将其关闭。
在 ASP.NET 中,如果您注册了对象 ( IRegisteredObject
),AppDomain
则会给您的代码 30 秒的运行时间。
有谁知道标准 WPF 应用程序的超时时间是多少?
我不知道如何为 DispatcherUnhandledException 处理程序设置超时
但是,应用程序是否以Environment.Exit或Application.Exit终止,其中存在未处理的异常?
引用: http: //www.dev102.com/2008/06/24/how-do-you-exit-your-net-application/
Environment.Exit - 来自 MSDN:终止此进程并为底层操作系统提供指定的退出代码。这是您使用控制台应用程序时要调用的代码。
Application.Exit - 来自 MSDN:通知所有消息泵它们必须终止,然后在处理完消息后关闭所有应用程序窗口。如果您已调用 Application.Run(WinForms 应用程序),这是要使用的代码,此方法会停止所有线程上所有正在运行的消息循环并关闭应用程序的所有窗口。此方法还有一些问题,请在 MSDN 页面中阅读。
对于 WPF,如果未处理的异常会导致应用程序因Environment.Exit(应为 Application.Exit)而崩溃 - 我怀疑应用程序在所有线程完成之前不会退出。如果是这样,那么您可以尝试通过 DispatcherUnhandledException 处理程序中的线程执行您需要执行的操作。
你能告诉我这是否也是这种行为吗?我好奇。我们从来没有遇到过这个问题,因为在 WPF DispatcherUnhandledException 处理程序上,我们只对磁盘进行简单的日志记录