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

迁移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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 13:50:44