You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Maui页面导航触发未处理异常(已添加Catch捕获块)

问题原因

你添加的try-catch仅覆盖了按钮点击事件的代码逻辑,但异常是在导航到页面的过程中触发的(页面初始化或XAML解析阶段),所以这个catch块根本捕获不到异常。

解决步骤

1. 捕获全局异常,获取具体错误信息

在App.xaml.cs中添加全局异常捕获逻辑,拿到详细的异常内容,这是定位问题的核心:

protected override void OnStart()
{
    // 捕获AppDomain级别的未处理异常
    AppDomain.CurrentDomain.UnhandledException += (sender, e) =>
    {
        var exception = e.ExceptionObject as Exception;
        Debug.WriteLine($"全局未处理异常:{exception?.Message}");
        Debug.WriteLine($"堆栈跟踪:{exception?.StackTrace}");
    };

    // 捕获Task中未观察到的异常
    TaskScheduler.UnobservedTaskException += (sender, e) =>
    {
        Debug.WriteLine($"Task未处理异常:{e.Exception.Message}");
        Debug.WriteLine($"堆栈跟踪:{e.Exception.StackTrace}");
        e.SetObserved(); // 标记异常已处理,避免程序崩溃
    };
}

2. 检查页面初始化阶段的异常

给页面构造函数添加try-catch,捕获InitializeComponent()执行时的异常:

public PurchaseATreePage()
{
    try
    {
        InitializeComponent();
    }
    catch (Exception ex)
    {
        Debug.WriteLine($"页面初始化异常:{ex.Message}");
        Debug.WriteLine($"堆栈跟踪:{ex.StackTrace}");
        throw; // 暂时抛出以便调试,后续可根据情况处理
    }
}

3. 排查XAML代码可能的问题

从你提供的Button XAML来看,常见坑点:

  • CornerRadius值过大:部分平台(如Android旧版本)对Button的CornerRadius有上限,若超过控件高度的一半可能引发异常,可尝试减小CornerRadius值(比如改成10)测试。
  • 属性拼写或兼容性问题:检查是否有拼写错误的属性名,或替换LightGray为Color.LightGray测试,确认颜色值是否在当前平台可用。

4. 验证导航代码正确性

确保触发页面导航的代码在主线程执行,示例正确导航代码:

// 确保在UI线程调用导航
await Navigation.PushAsync(new PurchaseATreePage());

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 15:37:06