首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xamarin.UWP UnhandledException事件处理程序从未被解雇

Xamarin.UWP UnhandledException事件处理程序从未被解雇
EN

Stack Overflow用户
提问于 2018-01-02 17:07:22
回答 1查看 586关注 0票数 1

在我的App.xaml.cs电脑里,我勾搭了UnhandledException

代码语言:javascript
复制
this.UnhandledException += OnUnhandledException;

,然后我提供了处理程序将错误信息发送到GoogleAnalytics。

代码语言:javascript
复制
private void OnUnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    var unhandledException = e.Exception;
    AnalyticsManager.LogError("", e.Exception.Message, "UnhandledException");
}

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

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

更新

它似乎只工作一次应用程序加载和一个未处理的错误发生。因此,在这两种情况下(在c-tor或onLaunched中连接onLaunched),如果在加载了app后出现错误,即按一下按钮,就可以正常工作。否则,即在加载app时发生未处理的异常,事件处理程序永远不会在Xamarin.UWP中命中。有趣的是,在Xamarin.Android上,处理程序将始终被命中。

EN

回答 1

Stack Overflow用户

发布于 2018-01-03 06:31:01

我有意在我的代码中引入了从未被处理过的DevideByZeroException,并且我希望我的OnUnhandledException处理程序会被调用,但这不会发生,无论是调试还是发布模式。

当我将OnUnhandledException放在应用程序的构造函数中时,不会调用DevideByZeroException处理程序。如果我将它放在OnLaunched方法中,它将按预期的方式调用,并放入主页的构造函数中。

根据文档的说法,只有当应用程序代码不再有可能捕获异常时,这个事件才会触发。

请注意,只有当应用程序代码不再可能捕获异常时,此事件才会触发。例如,假设一个app事件处理程序调用一个,该API反过来调用一个回调。如果内部应用程序代码抛出一个异常而没有捕获它,该异常将通过Windows传播回应用程序代码的外层,这给了捕获它的机会。只有当应用程序代码不再有机会通过正常传播捕获异常时,UnhandledException事件才会被触发。

为了直接捕获异常,可以使用try-catch技术。要获得更多信息,您可以参考C#或Visual中Windows运行时应用程序的异常处理

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48065045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档