我正在尝试创建一个计时器,该计时器每隔一个滴答声都会更新标签,这就是我到目前为止所拥有的:

public override void ViewDidLoad ()
{
    timer = new Timer ();
    timer.Elapsed += new ElapsedEventHandler (TimerOnTick);
    timer.Interval = 1000;
    timer.Start ();
}

private void TimerOnTick (object obj, EventArgs ea)
{
   timerLabel.Text = DateTime.Now.ToString ();
   timerLabel.SetNeedsDisplay ();
}


但这不会更新标签。在调试中,我可以看到已设置timerLabel.Text,但无法获取更新或重绘的视图。

更新我的timerLabel.text后如何重新绘制视图?

最佳答案

由于System.Timers.Timer在单独的线程上调用处理程序,因此未更新标签。您不能在除main之外的其他线程中更改ui元素。

封装要在主线程上执行的处理程序代码:

private void TimerOnTick (object obj, EventArgs ea)
{
   this.InvokeOnMainThread(delegate {
       timerLabel.Text = DateTime.Now.ToString ();
       timerLabel.SetNeedsDisplay ();
   });
}

10-06 02:12