我的WinForm应用程序调用一个线程来运行一个进程,同时也启动一个WinForms Timer控件Tick事件来显示线程进程的进度。
public void threadTimer_Tick(object sender, EventArgs e)
{
lblProgessCount.Text = countDownText;
}
countDownText
是一个静态字符串变量,它从线程进程中获取,并且我不时想在UI标签控件中显示其中的最新值。但它给了我以下错误,
跨线程操作无效:控制从创建它的线程以外的线程访问'lblProgressCount'。
但计时器是在线程进程外启动的。任何人都可以解释如何解决这个问题。
答案 0 :(得分:2)
但是计时器是在线程进程之外启动的。
但是你正在操作计时器回调中的UI。在这里,您尝试从不同的线程修改UI:
lblProgessCount.Text = ...
您应该使用Invoke
方法确保将此操作封送到主UI线程:
public void threadTimer_Tick(object sender, EventArgs e)
{
Action setValue = () => lblProgessCount.Text = countDownText;
this.Invoke(setValue);
}