Timer C#/MonoTouch启动程序:如何定期更改标签的颜色?

Timer C#/MonoTouch启动程序:如何定期更改标签的颜色?,timer,xamarin.ios,background-color,uicolor,Timer,Xamarin.ios,Background Color,Uicolor,我对C语言编程相当陌生,所以请不要对下面的问题吝啬。 我想定期更改标签(MonoTouch)的背景色,但事实并非如此。 无论如何,控制台中会定期打印“_色调”的值 public void _timer_elapsed(object sender, ElapsedEventArgs e) { _hue -= 0.1f; lblScreen.BackgroundColor = UIColor.FromHSB (_

我对C语言编程相当陌生,所以请不要对下面的问题吝啬。 我想定期更改标签(MonoTouch)的背景色,但事实并非如此。 无论如何,控制台中会定期打印“_色调”的值

            public void _timer_elapsed(object sender, ElapsedEventArgs e)
        {
            _hue -= 0.1f;
            lblScreen.BackgroundColor = UIColor.FromHSB (_hue,_sat,_bri);
            Console.WriteLine (_hue);
        }
你们有什么提示吗

THANX!:-)

是关于MonoTouch线程的链接


您可能正在后台线程上接收计时器事件。使用
BeginInvokeOnMainThread
更新UI可能会修复它。

请指定您使用的计时器类型。如果is是一个
System.Timers.Timer
,则需要使用
BeginInvokeOnMainThread
InvokeOnMainThread
。您不能从后台线程更新UI。@Jonathan.Peppers很可能正确地指向目标:-),应该将他的评论转换为答案!大多数现有的UI工具包(包括iOS)只能从主线程安全地运行,而大多数计时器将在单独的线程上运行,并在此(单独的,而不是主)线程上通知您。这要求您使用建议的方法回调主线程,以便更新任何UI元素。
 public void _timer_elapsed(object sender, ElapsedEventArgs e)
    {
        _hue -= 0.1f;
        InvokeOnMainThread(delegate{
            lblScreen.BackgroundColor = UIColor.FromHSB (_hue,_sat,_bri);
        });
        Console.WriteLine (_hue);
    }