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

.NET 8 MAUI中Shell.Current.GoToAsync异常:特定场景无响应

.NET 8 MAUI LoadingPage跳转LoginPage无响应问题解决

在.NET 8 MAUI项目的LoadingPage中,重写OnNavigatedTo方法时,原本带认证检查的跳转逻辑能正常切换页面,但改成直接调用await Shell.Current.GoToAsync($"///{nameof(LoginPage)}")后,LoadingPage一直停留在界面上,LoginPage的构造函数完全没被执行。

问题原因

  1. 异步方法阻塞UI线程:OnNavigatedTo本质是同步事件回调,直接在里面执行异步导航操作,可能导致UI上下文阻塞,Shell的导航流程无法正常推进。
  2. 路由或路径配置错误:LoginPage未正确注册到Shell路由,或者///根路径的使用不匹配当前Shell的页面结构。

解决办法

  • 调整异步导航的执行方式
    不要在OnNavigatedTo里直接写异步代码,把导航逻辑抽成独立的异步方法,通过非阻塞的方式调用:

    protected override void OnNavigatedTo(NavigatedToEventArgs args)
    {
        base.OnNavigatedTo(args);
        // 用_ = 避免阻塞当前方法
        _ = NavigateToTargetPage();
    }
    
    private async Task NavigateToTargetPage()
    {
        await Shell.Current.GoToAsync($"///{nameof(LoginPage)}");
    }
    
  • 检查Shell路由注册
    确保LoginPage已经在Shell中完成路由注册,比如在AppShell.xaml.cs里添加:

    public AppShell()
    {
        InitializeComponent();
        Routing.RegisterRoute(nameof(LoginPage), typeof(LoginPage));
    }
    

    或者直接在AppShell.xaml中声明页面路由:

    <ShellContent Route="LoginPage" ContentTemplate="{DataTemplate local:LoginPage}" />
    
  • 验证导航路径正确性
    如果LoginPage不是Shell的根级别页面,去掉///前缀,直接使用await Shell.Current.GoToAsync(nameof(LoginPage));如果是根页面,确认Shell的结构中该页面的层级是否匹配根路径要求。

  • 排查导航循环
    检查LoginPage的代码,确保没有触发跳回LoadingPage的逻辑,避免出现页面跳转死循环导致LoadingPage一直显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 00:02:35