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

.NET MAUI应用恢复时触发System.ObjectDisposedException错误求助

解决方案
  • 清理生命周期中的无效引用
    应用挂起时,系统可能会回收MAUI内部依赖的原生控件(比如你没显式使用的MauiMaterialButton,可能是弹窗、操作菜单等组件的底层实现)。在OnSleep方法中,确保清理所有临时绑定的资源或控件引用,不要持有可能被系统释放的对象;在OnResume中,避免复用挂起前的页面或控件实例,必要时重新初始化组件。

  • 用主线程包裹UI操作
    如果OnResume中涉及UI更新或弹窗调用,一定要用MainThread.BeginInvokeOnMainThread包裹,确保操作在UI线程安全执行,且等待页面完全恢复后再处理:

    protected override void OnResume()
    {
        base.OnResume();
        MainThread.BeginInvokeOnMainThread(() =>
        {
            // 你的恢复逻辑,比如重新加载数据、刷新界面等
        });
    }
    
  • 升级MAUI版本并处理平台特定逻辑
    该问题可能是MAUI的已知bug,优先升级到.NET 7/8的最新稳定补丁版本。针对Android平台,可在Platforms/Android/MainActivity.cs中重写OnRestart方法,补充平台级的恢复逻辑:

    protected override void OnRestart()
    {
        base.OnRestart();
        // 重置原生控件状态或触发MAUI内部的状态重建
    }
    
  • 校验导航栈有效性
    若挂起时当前页面被系统回收,恢复时导航栈可能存在无效实例。在OnResume中检查页面状态,必要时重置导航栈:

    protected override void OnResume()
    {
        base.OnResume();
        if (CurrentPage?.IsDisposed ?? true)
        {
            _ = Navigation.PopToRootAsync();
            _ = Navigation.PushAsync(new YourMainPage());
        }
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 13:47:08