计时器不包含在系统中.在Xamarin.Forms线程

本文关键字:Xamarin Forms 线程 系统 包含 计时器 | 更新日期: 2023-09-27 18:08:30

我在Xamarin.Android中使用了System.Threading.Timer

我如何在Xamarin.Forms中使用相同的类?我想把我的项目从Xamarin转过来。Android in Xamarin.Forms)

public static System.Threading.Timer timer;
if (timer == null)
{
    System.Threading.TimerCallback tcb = MyMethod;
    timer = new System.Threading.Timer(tcb, null, 700, System.Threading.Timeout.Infinite);
}
else
{
    timer.Change(System.Threading.Timeout.Infinite, System.Threading.Timeout.Infinite);
    timer.Change(700, System.Threading.Timeout.Infinite);
}

计时器不包含在系统中.在Xamarin.Forms线程

System.Threading.Timer在PCL代码中不可用。你可以使用Xamarin.Forms.Device.StartTimer方法,如下所示:http://developer.xamarin.com/api/member/Xamarin.Forms.Device.StartTimer/

对于PCL,您可以使用async/await功能创建自己的。这种方法的另一个优点是——计时器方法的实现可以在计时器处理程序

中等待异步方法。
public sealed class AsyncTimer : CancellationTokenSource
{
    public AsyncTimer (Func<Task> callback, int millisecondsDueTime, int millisecondsPeriod)
    {
        Task.Run(async () =>
        {
            await Task.Delay(millisecondsDueTime, Token);
            while (!IsCancellationRequested)
            {
                await callback();
                if (!IsCancellationRequested)
                    await Task.Delay(millisecondsPeriod, Token).ConfigureAwait(false);
            }
        });
    }
    protected override void Dispose(bool disposing)
    {
        if (disposing)
            Cancel();
        base.Dispose(disposing);
    }
}

用法:

{
  ...
  var timer = new AsyncTimer(OnTimer, 0, 1000);
}
private async Task OnTimer()
{
   // Do something
   await MyMethodAsync();
}

我找到了Xamarin.forms中定时器的解决方案

  1. Device.StartTimer(TimeSpan.FromMilliseconds(1000), OnTimerTick);//TimeSpan.FromMilliseconds(1000)指定以毫秒为单位的时间//OnTimerTick是将要执行的函数返回布尔值

  2. private bool OnTimerTick(){//要执行的代码lblTime。Text = newHighScore .ToString();newHighScore + +;返回true;}

我希望你能明白我的意思谢谢。