Xamarin.UWP UnhandledException事件处理程序永远不会被解雇

问题描述 投票:0回答:1

在我的App.xaml.cs ctor中,我连接了UnhandledException

this.UnhandledException += OnUnhandledException;

,然后我提供了处理程序,以便向GoogleAnalytics发送错误信息

private void OnUnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    var unhandledException = e.Exception;
    AnalyticsManager.LogError("", e.Exception.Message, "UnhandledException");
}

我故意在我的代码中引入DevideByZeroException,它从未被处理过,我希望我的OnUnhandledException处理程序可以被调用但不会发生,无论是Debug还是Release模式。我在这个处理程序中设置了一个断点,并且永远不会达到该断点。

另一方面,在Xamarin.Android上执行相同操作将达到断点。

UPDATE

它似乎仅在加载应用程序并且发生未处理的错误时才起作用。因此,在两种情况下(在c-tor或onLaunched中挂起UnhandledException)如果在加载app之后发生错误,即在按钮点击时,将会起作用。否则,即在加载app期间发生未处理的异常,事件处理程序永远不会在Xamarin.UWP中被命中。有趣的是,在Xamarin.Android上,处理程序将始终被击中。

xamarin.forms xamarin.android unhandled-exception xamarin.uwp
1个回答
1
投票

我故意在我的代码中引入了DevideByZeroException,它永远不会被处理,我希望我的OnUnhandledException处理程序可以被调用但不会发生,无论是Debug还是Release模式。

当我在app的构造函数中放置OnUnhandledException时,不会调用DevideByZeroException处理程序。如果我将它放在OnLaunched方法中,它将按预期调用,以及放入MainPage的构造函数。

根据document,只有在应用程序代码不再有可能捕获异常的情况下,此事件才会触发。

请注意,只有在应用程序代码不再可能捕获异常的情况下,才会触发此事件。例如,假设应用程序事件处理程序调用Windows运行时API,而后者又调用回调。如果内部应用程序代码抛出异常并且没有捕获它,则异常将通过Windows运行时传播回应用程序代码的外层,从而有机会捕获它。只有当应用程序代码没有机会通过正常传播捕获异常时,才会触发UnhandledException事件。

为了直接捕获异常,您可以使用try-catch技术。有关更多信息,请参阅Exception handling for Windows Runtime apps in C# or Visual Basic

© www.soinside.com 2019 - 2024. All rights reserved.