2012-01-21 33 views
2

我很新的C#編程,所以請不要在以下問題的意思。 我想要定期更改標籤(MonoTouch)的背景顏色,但它不會。 無論如何,「_hue」的值會定期打印在控制檯中。C#/ MonoTouch啓動器:如何定期更改標籤的顏色?

  public void _timer_elapsed(object sender, ElapsedEventArgs e) 
     { 
      _hue -= 0.1f; 
      lblScreen.BackgroundColor = UIColor.FromHSB (_hue,_sat,_bri); 
      Console.WriteLine (_hue); 
     } 

你們有沒有提示?

THANX! :-)

+2

請指定您正在使用什麼類型的計時器。如果is是'System.Timers.Timer',則需要使用'BeginInvokeOnMainThread'或'InvokeOnMainThread'。您無法從後臺線程更新UI。 – jonathanpeppers

+0

@ Jonathan.Peppers可能適用於:-),並且應該將他的評論轉換爲答案!大多數現有的UI工具包(包括iOS)只能從主線程**安全**,而大多數定時器將在單獨的線程上運行,並在此(單獨的,而非主線程)線程上通知您。這要求您使用建議的方法回調主線程,以便更新任何UI元素。 – poupou

回答

2

Here是與MonoTouch進行線程連接的鏈接。

您可能會在後臺線程上收到計時器事件。使用BeginInvokeOnMainThread來更新用戶界面可能會解決它。

3
public void _timer_elapsed(object sender, ElapsedEventArgs e) 
    { 
     _hue -= 0.1f; 
     InvokeOnMainThread(delegate{ 
      lblScreen.BackgroundColor = UIColor.FromHSB (_hue,_sat,_bri); 
     }); 
     Console.WriteLine (_hue); 
    } 
相關問題