2011-05-14 75 views
3

我試圖創建一個計時器,將更新標籤每滴答後重繪的UILabel,這是我到目前爲止有:不能更新文本

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後,如何才能重新繪製視圖?

回答

6

由於System.Timers.Timer在單獨的線程上調用處理程序,標籤沒有被更新。您不能更改主體以外的其他線程中的UI元素。

附上您的處理程序代碼必須在主線程上執行:

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

巨大的感謝!我一直堅持了一個小時。 – Dimitar 2011-05-14 09:26:18