我在另一个类中使用线程编写以更新一个标签。该标签是Winform主类中的内容。
Scanner scanner = new Scanner(ref lblCont);
scanner.ListaFile = this.listFiles;
Thread trd = new Thread(new ThreadStart(scanner.automaticScanner));
trd.IsBackground = true;
trd.Start();
while (!trd.IsAlive) ;
trd.Join();
如您所见,我将标签的引用传递给第二个类的构造函数。 在第二个类(Scanner)中,我有一个名为“automaticScanner”的方法,该方法应使用以下代码更新标签:
public Scanner(ref ToolStripStatusLabel _lblContatore)
{
lblCounter= _lblContatore;
}
Thread threadUpdateCounter = new Thread(new ThreadStart(this.UpdateCounter));
threadUpdateCounter.IsBackground = true;
threadUpdateCounter.Start();
while (!threadUpdateCounter .IsAlive) ;
threadUpdateCounter.Join();
private void AggiornaContatore()
{
this.lblCounter.Text = this.index.ToString();
}
我在更新标签时收到了这个错误:
跨线程操作无效:从创建它的线程以外的线程访问控件“Main”
我使用的是 .net 4 和 Winform C#。
非常感谢答案。
消息:
trd.Join();
这行代码阻塞了我的GUI,标签没有更新。 有方法控制线程的完成并在结束之前更新标签吗? 谢谢
} - Antonio Leite