0

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

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

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

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

但是定时器是在线程进程之外启动的。谁能解释如何解决这个问题。

4

1 回答 1

2

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

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

lblProgessCount.Text = ...

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

public void threadTimer_Tick(object sender, EventArgs e)
{
    Action setValue = () => lblProgessCount.Text = countDownText;
    this.Invoke(setValue);
}
于 2013-05-23T06:00:28.877 回答