根据Exception handling for Windows Runtime apps in C# or Visual Basic MS建议:
"如果您的应用程序崩溃,请不要尝试向用户显示描述崩溃细节的任何信息,即使应用程序生命周期状态允许您这样做。"
[此推荐适用于WinRT应用,似乎不建议使用UWP。我认为我们应该对待它们。]
有人可以解释这背后的理由吗?
MS UWP应用程序确实遵循此规则。我有邮件,翻译,计算器,商店应用程序,...中止没有任何关于崩溃或重启的反馈。
我个人觉得应用程序在没有任何提示的情况下消失就很烦人。 "小沃森"在下一次启动时显示错误信息的解决方案对我来说很奇怪。这两种行为都不符合普通用户期望
App_UnhandledException有什么问题:
应用程序处于如此糟糕的状态且无法显示MessageDialog(我从未体验过)的极少数情况下没有理由不尝试。
据我所知,在App_UnhandledException中,app可能处于未定义/脆弱状态,应该最小化此处执行的代码。但是我们已经在这里跟踪异常并通过HockeyApp跟踪它们。为什么不通知用户?
如果崩溃错误通知对用户有帮助,则取决于应用和目标受众。对于企业应用程序,我从长期经验中知道错误通知(即使有深入的技术信息)肯定是有帮助的。用户通常能够绕过问题并继续使用有缺陷的应用程序,甚至无需联系支持(同时支持自动意识到问题)。面向消费者的应用程序的价值是有争议的。我假设许多用户在输入数据后立即看到Arg_OverflowException时会停止输入0作为除数,或者在看到http_client异常时记得拔掉了他们的电缆调制解调器。
答案 0 :(得分:0)
没有任何技术原因反对在UWP应用程序崩溃时通知用户意外异常或显示异常详细信息。如果此类通知可能对最终用户有所帮助,则取决于应用和目标受众。
此处的代码示例通过App.UnhandledExcetion或下一个应用程序启动来通知用户:
Protected Overrides Async Sub OnLaunched(e As Windows.ApplicationModel.Activation.LaunchActivatedEventArgs)
...
If _notifyUserAboutCrash = NotifyUserAboutCrash.OnNextStart Then
Await ProblemReporter.NotifyLastExToUserIfExisting()
End If
...
End Sub
Private Async Sub App_UnhandledException(sender As Object, e As UnhandledExceptionEventArgs) Handles Me.UnhandledException
If _isAborting Then Return
Dim unhandledEx = New Exception(e.Message, e.Exception)
e.Handled = True
Trace.Error($"Unexpected exception: {unhandledEx.InnerException.ToString}")
Await Trace.CompleteAsync()
Try
ProblemReporter.SaveAsLastException(unhandledEx)
HockeyClient.Current.TrackException(unhandledEx.InnerException)
HockeyClient.Current.Flush()
Catch ex As System.Exception
Trace.Error(ex)
End Try
If _notifyUserAboutCrash = NotifyUserAboutCrash.OnError Then
Await ProblemReporter.NotifyExceptionToUserViaMessageDialogAsync(unhandledEx)
End If
Await ForceAppCrashAsync(unhandledEx)
End Sub
Private Shared Async Function ForceAppCrashAsync(unhandledEx As Exception) As Task
Trace.Fatal("!!! aborting")
Await Trace.CompleteAsync()
_isAborting = True
ExceptionDispatchInfo.Capture(unhandledEx.InnerException).Throw()
End Function
有关完整的代码和一些问题,请参阅我的帖子Global Error Handling for UWP-Apps。