System.Environment.Exit(0)阻止hockeyapp注册崩溃

我开始了一个空白的WPF应用程序(如下所示)来实现HockeyApp崩溃报告。 当程序启动时,一个窗口弹出一个按钮供用户按下。 当用户点击它时,处理程序尝试除以零并使应用程序崩溃。 我收到崩溃报告,并且一切都运行顺利直到我模仿了我们的大系统的错误捕获方法,即使用DispatcherUnhandledException事件处理程序捕获“未捕获”异常,然后调用System.Environment.Exit(0)以正常方式结束任何内容的背景。 现在HockeyApp api不会发送崩溃报告。 我想知道如果在更高层次上捕捉例外情况会让HockeyApp认为“哦,他们控制了事情”,并且不会发生“崩溃”。

我现在正在与HockeyApp支持人员讨论这个问题,但我想知道是否有其他人有这个问题。 我是否应该取出Exit(0)行,或者当我们有未捕获的异常时退出应用程序是否有更好的做法? 我试图将错误代码从0更改为574(ERROR_UNHANDLED_EXCEPTION),但没有结果。 我不相信有任何我们需要保存的数据,除了HockeyApp API已经有的数据。

应用程序类:

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;
    }
}

Environement.Exit立即终止您的应用程序。 所以,我想,曲棍球什么都不做也没什么奇怪的。

即使其他线程正在运行,Exit也会立即终止应用程序。 如果在应用程序入口点中调用return语句,它将导致应用程序仅在所有前台线程终止后终止。

如果从try或catch块调用Exit,则任何finally块中的代码都不会执行。 如果使用return语句,finally块中的代码会执行。

最佳做法倾向于基于观点和情况。 例如,我们在未处理的异常上记录堆栈跟踪,然后在我们的UWP应用程序中调用Environement.FailFast (尽管我们不使用曲棍球应用程序)。 我们的逻辑很简单 - 我们的记录器设施可能还活着,但我们对应用程序的其他部分不太确定。 如果即使记录器设备不起作用,我们也无法做任何事情。 Imho ExitFailFast是最后一个步骤,只有在您无法恢复某个有效状态时才会使用。

链接地址: http://www.djcxy.com/p/51237.html

上一篇: System.Environment.Exit(0) preventing hockeyapp from registering a crash

下一篇: Mutex lock in C++ destructor causes exception when exit() called in Python