在.NET CF中,是否有像Application.DispatcherUnhandledException这样的事件允许我们捕获所有未处理的日志异常以及保持应用程序打开而不会崩溃?
DispatcherUnhandledException事件处理程序的参数允许通过设置
来停止应用程序崩溃// Prevent default unhandled exception processing
e.Handled = true;
事件AppDomain.CurrentDomain.UnhandledException允许捕获未处理的异常,但似乎没有办法阻止应用程序关闭。
我需要.NET CF中DispatcherUnhandledException提供的类似功能。请帮帮我。
答案 0 :(得分:5)
不。您有机会通过AppDomain.CurrentDomain.UnhandledException事件记录任何未处理的异常。但是,这不会捕获异常并允许您继续。
坦率地说,你希望“让应用程序保持开放而不会崩溃”,这是一个可以理解但天真的目标。我见过很多试图做到这一点的软件,其中大部分是彻头彻尾的废话。如果您的应用程序中的某些出现了错误而且您没有明确的捕获,那么您不知道出了什么问题,并且继续是最危险的。相反,您应该努力了解程序中可能出现异常的位置,并在以后为这些例程编写适当的处理程序。您可以记录已经注意到的异常,并从现场返回这些报告。然后,您可以编写适当的处理程序来处理这些错误。
在我的上一个项目中,我们实现了“全能”(对于UI线程),但这只会暂停应用程序,通知用户问题并关闭应用程序(然后另一个服务将重新启动它)。这实际上非常简单,因为我们通过一个点重新路由所有按键和点击(以便轻松配置键和屏幕)。如果您只是使用标准表格,那可能会更棘手。
还要确保您还在后台线程上编写高级捕获,因为后台线程上的未处理异常会立即终止您的应用。在这种情况下,我们通常将线程编组回UI“catch-all”处理程序(通过接口),该处理程序(再次)显示消息,记录异常并关闭应用程序。