如果你看明白了这段例子,应该就不难理解了。
这个例子一共提供了三个处理方式,第一个是不安全的,我们就不用看了。
第二个是使用Invoke方法传一个委托进去,分配到UI线程上执行。一般情况下我们都采用这个方法:
private void SetText(string text) { // InvokeRequired required compares the thread ID of the // calling thread to the thread ID of the creating thread. // If these threads are different, it returns true. if (this.textBox1.InvokeRequired) { SetTextCallback d = new SetTextCallback(SetText); this.Invoke(d, new object[] { text }); } else { this.textBox1.Text = text; } }
将委托用Invoke方法调用,可以将委托中的代码传送到UI线程上安全的执行。在这个委托里面,你可以安全的改变任何控件的状态和值,如果你要传递多个参数,看到那个object[]了没?
当然,也可以直接用闭包的形式传进去。
用心看代码,用心写代码。多看多试,这种问题老实说自己试试比来这里提问快多了。