You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

在UnhandledException时显示消息对话框的有效性及弹窗不显示问题

未处理异常时显示弹窗的合规性与问题排查

嘿,我来帮你梳理这个问题!先直接回答你的核心疑问,再解决弹窗没弹出的实际问题。

一、这种场景显示弹窗是否合规有效?

完全合规,而且是提升用户体验的合理操作!

  • UWP平台允许开发者捕获未处理异常并显示自定义提示,只要弹窗内容不违反Microsoft Store政策(比如不误导用户、不含违规信息),就没问题。
  • 系统默认的崩溃提示比较生硬,自定义弹窗可以更友好地告知用户情况,甚至引导用户反馈问题,这是很有效的体验优化手段。
  • 但要注意:未处理异常发生时应用处于不稳定状态,弹窗逻辑一定要极简,避免在弹窗代码里再抛出新异常,不然会雪上加霜。

二、为什么你的弹窗没弹出来?

看你的代码片段,问题大概率出在这两点:

  1. 未标记异常已处理:系统触发UnhandledException事件后,默认会直接终止应用,如果不告诉系统“我已经处理了这个异常”,弹窗还没来得及渲染,应用就被关掉了。
  2. 使用了async void事件处理程序:异步方法在事件触发后,系统不会等待它执行完成就继续走崩溃流程,导致弹窗还没显示就终止了。

三、修正后的代码示例

把你的事件处理程序改成这样,就能正常显示弹窗了:

private void App_UnhandledException(object sender, Windows.UI.Xaml.UnhandledExceptionEventArgs e)
{
    // 第一步:标记异常已处理,阻止系统立即终止应用
    e.Handled = true;

    // 创建自定义错误对话框
    var errorDialog = new Windows.UI.Popups.MessageDialog(
        $"抱歉,应用出现了未预料的错误:{e.Message}",
        "应用异常提示"
    );
    // 添加确定按钮
    errorDialog.Commands.Add(new Windows.UI.Popups.UICommand("确定") { Id = 0 });

    // 同步等待对话框关闭(避免异步操作导致弹窗来不及显示)
    errorDialog.ShowAsync().AsTask().Wait();

    // 弹窗关闭后主动退出应用(此时应用状态不稳定,不建议继续运行)
    Application.Current.Exit();
}

额外注意事项

  • 开发调试阶段可以用这种方式直观查看异常,但发布到Store的版本,建议同时添加异常日志记录(比如写入本地文件或上传到服务器),方便后续排查问题。
  • 不要依赖e.Handled = true让应用继续运行,异常发生后应用状态可能已损坏,继续运行容易出现更多问题,显示提示后主动退出是更稳妥的选择。

内容的提问来源于stack exchange,提问作者Dishant

火山引擎 最新活动