Universal WinRT应用程序中的AppBarButton异常不会触发未处理的异常事件

Mik*_*SFT 5 c# xaml windows-runtime windows-phone-8.1 win-universal-app

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

我有以下代码:

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

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

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

throw new FileNotFoundException();
Run Code Online (Sandbox Code Playgroud)

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

我已经设置DISABLE_XAML_GENERATED_BINDING_DEBUG_OUTPUTDISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION在我的Project Properties禁用内置覆盖,而据我所知,有没有async void在这里的情况(如不叫地铁/ WinRT的UI异步无效事件处理未处理的异常处理 -虽然从我读过,在任何情况下,8.1中都解决了这种问题.但是我可能还没有看到某种隐藏的异步无效事物.

我敢肯定我错过了一些愚蠢的东西.它是什么?

(编辑)当异常处于AppBarButton按钮事件中时,这似乎是一个问题.

(编辑2)这里有一个最小的repro: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();
}
Run Code Online (Sandbox Code Playgroud)

Eld*_*iev 0

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