我启动了一个空白的WPF应用程序(如下所示)来实现HockeyApp崩溃报告 . 程序启动时,会弹出一个窗口,其中只有一个按钮供用户按下 . 当用户单击它时,处理程序会尝试除以零并使应用程序崩溃 . 我收到了崩溃报告,一切都运行顺利直到我模仿我们更大的系统的错误捕获方法,即使用DispatcherUnhandledException事件处理程序来捕获"uncaught"异常,然后调用System.Environment.Exit(0)以优雅地结束后台的任何内容 . 现在HockeyApp api不知道如果在更高级别捕获异常使得HockeyApp认为"Oh, they got things under control"并且不会注册"crash."
我正在与HockeyApp支持人员谈论此事,但我想知道是否有其他人遇到过这个问题 . 我应该取出Exit(0)行,还是在我们有未被捕获的例外时退出应用程序有更好的做法?我已经尝试将错误代码从0更改为574(ERROR_UNHANDLED_EXCEPTION)而没有结果 . 我不相信我们需要保存任何数据,除了HockeyApp api已有的数据 .
App类:
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
RegisterHockeyAppCrashReporting();
Current.DispatcherUnhandledException += Current_DispatcherUnhandledException;
}
private void Current_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
{
System.Environment.Exit(0);
}
private async void RegisterHockeyAppCrashReporting()
{
HockeyClient.Current.Configure(AppConstants.APP_ID)
.SetContactInfo(AppConstants.USER_NAME, AppConstants.USER_EMAIL);
await HockeyClient.Current.SendCrashesAsync(true);
}
}
MainWindow类:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
var zero = 0;
var number = 1;
var crash = number / zero;
}
}
1 回答
Environement.Exit立即终止您的申请 . 所以,我想,曲棍球没有做任何事情并没有什么奇怪的 .
最佳实践往往是基于意见和情境依赖 . 例如,我们在未处理的异常上记录堆栈跟踪,然后在我们的UWP应用程序中调用
Environement.FailFast
(尽管我们不使用Hockey应用程序) . 我们的逻辑很简单 - 我们的 Logger 工具可能还活着但我们无论如何都无法做任何事情 . ImhoExit
和FailFast
是仅在您无法恢复某些有效状态时才应使用的最后步骤 .