2011-08-24 55 views
0

可能重复:
How to update GUI from another thread in C#?
My Timer event crashes because the events are called on a different threadWindows窗体从其他线程更新控制

我有我想定期更新UI控件这是一个标签,一个计时器对象。但它崩溃,并说我需要在UI线程上更新它。谁能帮忙?

private void frmMain_Load(object sender, EventArgs e) 
    { 
     aTimer = new System.Timers.Timer(1000);   
     aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent); 
     aTimer.Interval = 2000; 
     aTimer.Enabled = true; 
    } 
    public void updateUI() 
    { 

     lblAirTrack.Text = "Tracking: " + itemList.Count + " items"; 

    } 

回答

1

如果您使用.NET 3.5+,请使用调度程序。否则像这样的东西应该工作:

private delegate void updateUIDelegate(); 

public void updateUI() 
{ 
    if (lblAirTrack.InvokeRequired) 
    { 
     lblAirTrack.Invoke(new updateUIDelegate(updateUI)); 
    } 
    else 
    { 
     lblAirTrack.Text = "Tracking: " + itemList.Count + " items"; 
    } 
} 
+0

不错,如果updateUI有一些参数传递怎么办。我试过这样做,但总是得到IDE错误 –

+1

例如,如果它带了一个字符串,请将字符串参数添加到updateUIDelegate和updateUI。然后,当你调用:lblAirTrack.Invoke(new updateUIDelegate(updateUI),newParameterGoesHere); – jglouie

相关问题