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

MAUI应用生命周期:订阅生命周期事件时触发空引用异常

.NET MAUI ViewModel订阅生命周期事件时出现对象引用错误

我之前在Xamarin应用中习惯从ViewModel订阅生命周期事件,以此在应用前后台切换时执行Model类代码。现在在.NET MAUI中尝试同样的方式,最初在App.xaml.cs中编写了以下代码:

protected override Window CreateWindow(IActivationState activationState)
{
    Window window = base.CreateWindow(activationState);
    window.Activated += (sender, eventArgs) => {
        Models.Debug.Log(LogType.Info, "Activated");
    };
    window.Deactivated += (sender, eventArgs) => {
        Models.Debug.Log(LogType.Info, "Deactivated");
    };
    return window;
}

这段代码能正常工作,日志可以输出到调试窗口(Debug.Log是我自制的日志工具)。

之后我调整了实现方式,先在App.xaml.cs中添加静态Window属性并赋值:

public static Window Window { get; private set; }
protected override Window CreateWindow(IActivationState activationState)
{
    Window window = base.CreateWindow(activationState);
    Window = window;
    return window;
}

接着在主页面的ViewModel中添加事件订阅代码:

var window = App.Window;

window.Activated += (s, e) =>
{
   Debug.Log(LogType.Info, "Activated");
};

window.Deactivated += (s, e) =>
{
   Debug.Log(LogType.Info, "Deactivated");
};

此时出现对象引用错误(Object reference not set to an instance of an object.)。

令我困惑的是,CreateWindow方法显然已经被调用(第一版代码能正常输出日志),为什么应用加载首个内容页面时App.Window仍未实例化?

寻求下一步解决建议,以及.NET MAUI生命周期管理的更优方案。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 11:56:23