Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# System.Environment.Exit(0)阻止hockeyapp注册崩溃_C#_Wpf_Crash Reports_Hockeyapp - Fatal编程技术网

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

C# System.Environment.Exit(0)阻止hockeyapp注册崩溃,c#,wpf,crash-reports,hockeyapp,C#,Wpf,Crash Reports,Hockeyapp,我启动了一个空白的WPF应用程序(如下所示)来实现HockeyApp崩溃报告。当程序启动时,弹出一个窗口,其中有一个按钮供用户按下。当用户单击它时,处理程序试图除以零并使应用程序崩溃。我收到了崩溃报告,一切都很顺利,直到我模仿了我们更大的系统的错误捕获方法,即使用事件处理程序捕获“未捕获”的异常,然后调用以优雅地结束后台的任何操作。现在,hockeyappapi没有发送崩溃报告。我想知道在更高级别捕获异常是否会让HockeyApp认为“哦,他们控制住了事情”,而不会出现“崩溃” 我目前正在和Ho

我启动了一个空白的WPF应用程序(如下所示)来实现HockeyApp崩溃报告。当程序启动时,弹出一个窗口,其中有一个按钮供用户按下。当用户单击它时,处理程序试图除以零并使应用程序崩溃。我收到了崩溃报告,一切都很顺利,直到我模仿了我们更大的系统的错误捕获方法,即使用事件处理程序捕获“未捕获”的异常,然后调用以优雅地结束后台的任何操作。现在,hockeyappapi没有发送崩溃报告。我想知道在更高级别捕获异常是否会让HockeyApp认为“哦,他们控制住了事情”,而不会出现“崩溃”

我目前正在和HockeyApp的支持人员讨论这个问题,但我想知道是否还有其他人有这个问题。我应该退出退出(0)行,还是在出现未捕获的异常时有更好的退出应用程序的实践?我尝试将错误代码从0更改为574(错误\u未处理\u异常),但没有结果。除了HockeyappAPI已有的数据外,我不相信还有任何数据需要保存

应用程序类别:

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);
    }
}
主窗口类:

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;
    }
}
立即终止您的应用程序。所以,我想,曲棍球没有任何作用这一事实并不奇怪

Exit立即终止应用程序,即使其他线程正在运行 跑步如果在应用程序条目中调用return语句 在这一点上,它只会导致应用程序在完成所有操作后终止 线程已终止

如果从try或catch块调用Exit,则任何 块不执行。如果使用return语句,则 finally块确实执行


最佳实践往往是基于意见和情况的。例如,我们记录未处理异常的堆栈跟踪,然后在我们的UWP应用程序中调用
environment.FailFast
(尽管我们不使用曲棍球应用程序)。我们的逻辑很简单——我们的记录器功能可能还活着,但我们不太确定应用程序的其余部分。如果连记录器设施都不能正常工作,那么我们无论如何也不能做任何事情。Imho
Exit
FailFast
是最后的步骤,只有在您没有希望恢复某些有效状态时才应该使用。

您能删除返回0的行吗?
异步无效注册表hockeyappcrashreporting()
这是一个非常严重的错误<代码>异步无效仅适用于事件处理程序。不能等待,您的应用程序可能会在注册运行之前终止。这可能是导致未处理异常的原因之一。使用
异步任务
并等待it@PanagiotisKanavos这是一个bug,但是在这个例子中它有点复杂
async void
可能是为了将事件处理程序的一部分卸载到异步上下文中,而不使
OnLaunched
本身成为异步处理程序。更好的方法是从当前UniqueContextButWaitFromThreadPoolAsync()使用类似于
var task=register的内容;task.Wait()
。这将立即阻止而不是等待。那更糟。应用程序启动事件处理程序正是应该使用
async void
的位置。类似的问题@PanagiotisKanavos该应用程序实际上运行良好,但我很高兴你指出了这一点。我完全忘记了将此代码更改回与示例应用程序上的示例相匹配。在发现退出代码问题之前,我尝试了一系列的方法让它工作。看起来我没有完全理解HockeyappAPI。他们的团队也回复我说:“这可能是因为您没有足够的时间让SDK通过立即退出您的应用程序来保存异常。请注意,我们不直接支持已处理的异常,但我们的产品组正计划在下一代HockeyApp Mobile Center中发布此版本。”