Timer_Tick事件中的跨线程冲突错误

时间:2013-05-23 05:51:25

标签: multithreading c#-4.0 timer

我的WinForm应用程序调用一个线程来运行一个进程,同时也启动一个WinForms Timer控件Tick事件来显示线程进程的进度。

    public void threadTimer_Tick(object sender, EventArgs e)
    {
        lblProgessCount.Text = countDownText;
    }

countDownText是一个静态字符串变量,它从线程进程中获取,并且我不时想在UI标签控件中显示其中的最新值。但它给了我以下错误,

  

跨线程操作无效:控制从创建它的线程以外的线程访问'lblProgressCount'。

但计时器是在线程进程外启动的。任何人都可以解释如何解决这个问题。

1 个答案:

答案 0 :(得分:2)

  

但是计时器是在线程进程之外启动的。

但是你正在操作计时器回调中的UI。在这里,您尝试从不同的线程修改UI:

lblProgessCount.Text = ...

您应该使用Invoke方法确保将此操作封送到主UI线程:

public void threadTimer_Tick(object sender, EventArgs e)
{
    Action setValue = () => lblProgessCount.Text = countDownText;
    this.Invoke(setValue);
}