迁移Xamarin.Forms至MAUI:Device.StartTimer弃用的替代方案
.NET MAUI中Device.StartTimer的替代方案
直接用Dispatcher.StartTimer替代,它和原Device.StartTimer的行为完全一致,且会自动在UI线程执行回调,完美解决你遇到的线程错误问题,不需要大幅改动现有代码结构。
修改后的代码示例
public void Start() { if (IsRunning) { return; } var wrapper = new TaskWrapper(Task, IsRecurring, true); Tasks.Add(wrapper); // 替换为Dispatcher.StartTimer,确保回调在UI线程执行 Application.Current.Dispatcher.StartTimer(Interval, wrapper.RunTask); }
关键说明
Dispatcher.StartTimer的参数和原Device.StartTimer完全匹配:第一个参数是定时器间隔,第二个参数是返回bool的回调方法——返回true时定时器会继续循环,返回false时停止。- 如果是在页面或视图中使用,也可以直接用当前控件的
Dispatcher(比如this.Dispatcher),效果相同;在ViewModel等无UI上下文的类中,用Application.Current.Dispatcher能确保获取到全局的UI线程调度器。 - 这个方案不需要修改现有包装类的逻辑,直接替换调用即可,适配你多处使用该包装类的场景。
内容的提问来源于stack exchange,提问作者Apqu
相关产品推荐
相关产品推荐

