【问题标题】:AppBarButton exception in Universal WinRT app not triggering unhandled exception event通用 WinRT 应用程序中的 AppBarButton 异常未触发未处理的异常事件
【发布时间】:2014-12-01 05:47:16
【问题描述】:

我有一个通用 WinRT 应用程序,我正在尝试实现全局异常处理,以便提示用户向我发送包含我收集的额外诊断信息的报告。 (额外的诊断信息是我无法使用将登录到 Dev Portal 的内置处理程序的原因)。

我有以下代码:

public App() {
    InitializeComponent();
    UnhandledException += OnUnhandledException;
    // other stuff
}

private void OnUnhandledException(object sender, UnhandledExceptionEventArgs e) {
    try {
        //handler
    }
    catch { }
    throw e.Exception;
}

当我在我的初始 XAML 页面(我的登录页面)中强制异常时,例如。 G。硬编码

throw new FileNotFoundException();

然后我的处理程序按预期触发。但是,如果我在起始页面导航到的主中心页面中执行此操作,那么看起来我的处理程序没有运行。我可以看到调试器中抛出了异常,但它只是在某个地方被吞没了。我不知道在哪里。我应该提到,应用程序在这一点上继续愉快地运行 - 它不会崩溃。

我在我的Project Properties 中设置了DISABLE_XAML_GENERATED_BINDING_DEBUG_OUTPUTDISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION 以禁用内置覆盖,据我所知,这里没有async void 的情况(例如Unhandled exception handler not called for Metro / WinRT UI async void event handler - 尽管从我'已经阅读,无论如何,这种问题在 8.1 中都得到了解决)。但是可能有某种我没有看到的隐藏的异步无效的事情发生。

我确定我错过了一些愚蠢的东西。这是什么?

(编辑)当异常出现在 AppBarButton 按钮事件中时,这似乎是一个问题。

(编辑 2)这里有一个最低限度的重现:http://1drv.ms/1rSNq3i - 在 8.1 模拟器或 8.1 手机上运行它,点击按钮,打开命令栏,然后选择 sign out - 这应该会触发异常并处理程序,但异常丢失。如果您将代码移动到同一页面中的按钮(标准按钮),则会触发处理程序。

(编辑 3)我尝试以最小的方式使用调度程序,它并没有改变可见的结果:

private void SignOutAppBarButton_Click(object sender, RoutedEventArgs e) {
    Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
        throw new FileNotFoundException();
    }).AsTask().Wait();
}

【问题讨论】:

  • 你能分享一个小的repro项目吗?手机和电脑都有问题吗?
  • 我还没有写PC版。我会尝试在一个干净的项目上重现。
  • 一些异常是本机异常,不会被托管代码捕获。不幸的是,您无法处理这些异常。如果您连接了一个托管调试器,它们甚至会使您的托管调试器崩溃。
  • 即使是像我列出的那样的托管 FileNotFoundException() ?它适用于按钮,而不是 CommandBar 中的 AppBarButton :(
  • 如果这与应用栏按钮隔离,也许您可​​以尝试在调度程序上运行点击处理代码?

标签: c# xaml windows-runtime windows-phone-8.1 win-universal-app


【解决方案1】:

除了UnhandledException 事件,您还需要处理Frame.NavigationFailed。页面构造函数中的异常导致触发 NavigationFailed

【讨论】:

    猜你喜欢
    • 2012-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-27
    • 2016-03-25
    • 1970-01-01
    相关资源
    最近更新 更多