微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

iOS Xamarin 计划计时器未触发

如何解决iOS Xamarin 计划计时器未触发

我们在 Xamarin(不是 Forms)项目中有一个调度程序逻辑,它已经存在了很长一段时间并且曾经有效。随着 iOS 升级之一(可能是很久以前),调度程序停止触发事件。

为什么下面的计时器不是每 20 秒触发一次?应用处于活动状态,屏幕亮起,并且我验证了初始化代码只运行了一次。

var interval = TimeSpan.FromSeconds(20);
Timer = NSTimer.CreateRepeatingScheduledTimer(interval,HandleScheduledEventMethod);

// ...

public void HandleScheduledEventMethod(NSTimer timer)
{
    // never executed,except for each call to Timer.Fire()
}

我按照 Apple docs 中的建议将其添加到 NSRunLoop,但这也无济于事。

NSRunLoop.Main.AddTimer(Timer,NSRunLoopMode.Common);

解决方法

AddTimer 必须在主线程上调用,在后台线程上调用时不起作用。

DispatchQueue.MainQueue.DispatchQueue(() => {
  Timer = NSTimer.CreateRepeatingScheduledTimer(interval,HandleScheduledEventMethod);
  NSRunLoop.Main.AddTimer(Timer,NSRunLoopMode.Common);
})

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。