关于跨线程调用控件的问题
跨线程掉用控件不能像普通的在同一个线程中使用控件的操作,比如,设置textbox的值textbox1.text=text;
这个在跨线程调用中是不允许的。
我知道要使用delegate来做,但对于各种控件的方法应该是不同的,哪位大神能总结一下关于跨线程调用控件的问题。
比如textbox、progressbar、button等 --------------------编程问答-------------------- 都一样,不论哪个控件的invoke都是form的this.invoke --------------------编程问答--------------------
那比如progressbar的方法this.progressBar1.PerformStep();
怎么改写呢?
关于为什么要用委托来进行线程间的通信的原因和原理我也不是很明白,哪个明白的麻烦讲解一下,万分感谢!! --------------------编程问答--------------------
this.Invoke(new Action(() =>
{
this.progressBar1.PerformStep();
}));
//或者这样
this.BeginInvoke(new Action(() =>
{
this.progressBar1.PerformStep();
}));
this.invoke的作用是将其他线程的操作封送到UI线程,前提是用到了多线程。在wpf下this.invoke改为
Dispatcher.Invoke或者begininvoke
示例中Action是.net类库已经定义的一种delegate,实际编写时自定义delegate也可以,匿名的delegate也可以。
补充:.NET技术 , 组件/控件开发