2012-01-21 32 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); 
    } 
相关问题