c# - 通用 WinRT 应用程序中的 AppBarButton 异常未触发未处理的异常事件

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

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

我有以下代码:

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

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

当我在我的初始 XAML 页面(我的登录页面)中强制出现异常时,e。 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 手机上运行它,点击按钮,打开命令栏,然后选择 注销 - 这应该会触发异常和处理程序,但异常会丢失。如果将代码移动到同一页面中的按钮(标准按钮),处理程序将触发。

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

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

最佳答案

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

关于c# - 通用 WinRT 应用程序中的 AppBarButton 异常未触发未处理的异常事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26225182/

相关文章:

c# - IIS6 WebService 下 Environment.GetFolderPath(Environment.SpecialFolder.ApplicationFolder) 返回的路径错误

c# 包含单词异常编号

c# - MVC模型中Controller的作用是什么?

c# - 有条件地改变目标框架版本

.net - 我们可以在 WPF 中调试 Xaml 吗?

c# - 为什么在 MultiBinding 中转换值时会得到 DependencyProperty.UnsetValue?

c# - System.Net.Http.Handlers.ProgressMessageHandler 立即返回 100%

c# - 为 Silverlight 类库打包 ResourceDictionary

keyboard - 如何将我们在 KeyDown 事件中获得的内容转换为 Unicode 字符?

c# - 我可以在适用于 Windows 8 的 WinRT Metro Style 应用程序上使用我现有的 .Net 4.0 类库吗