2012-01-21 7 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

使用しているタイマーの種類を指定してください。 'System.Timers.Timer'が' BeginInvokeOnMainThread'か 'InvokeOnMainThread'を使用している必要があります。 UIをバックグラウンドスレッドから更新することはできません。 – jonathanpeppers

+0

@ Jonathan.Peppersはターゲットになる可能性が高いです:-)彼のコメントを答えに変換する必要があります! **ほとんどのタイマーは別のスレッドで実行され、この(別のメインスレッドではなく)スレッドで通知されますが、ほとんどの既存のUIツールキット(およびiOSを含む)は**安全に**メインスレッドからしか**使用できません。そのためには、UI要素を更新するために、提案された方法を使用してメインスレッドにコールバックする必要があります。 – poupou

答えて

2

Hereは、MonoTouchとのスレッド化のリンクです。

タイマーイベントは、バックグラウンドスレッドで受信された可能性があります。 BeginInvokeOnMainThreadを使用してUIを更新すると、それが解決される可能性があります。

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