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
相关产品推荐
相关产品推荐

