这个问题已经在这里有了答案:




9年前关闭。






我有一个计时器对象,我想定期更新作为标签的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";

    }

最佳答案

如果您使用的是.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";
    }
}

10-04 14:15