Control 不能在创建它的 Thread 之外被调用。但可以通过 invoke 来保证 Control 线程安全。
在跨线程更新的时候,Control 会检查 CurrentThread 是否为创建 Control 的线程,并报错!
示例代码如下:
private void btnStart_Click(object sender, EventArgs e)
{
//注意:特地不使用 Timer 控件
Thread thread = new Thread(Fun);
thread.Start(DateTime.Now.ToString());
}
//报错:线程间操作无效: 从不是创建控件“lblTime”的线程访问它。
private void Fun(object datetime)
{
lblTime.Text = (string)datetime;
}
{
//注意:特地不使用 Timer 控件
Thread thread = new Thread(Fun);
thread.Start(DateTime.Now.ToString());
}
//报错:线程间操作无效: 从不是创建控件“lblTime”的线程访问它。
private void Fun(object datetime)
{
lblTime.Text = (string)datetime;
}