如何在另一线程中修改窗体中控件的内容
如我单击一个命令按钮,事件里生成一个新线程,我想在那个线程里更改窗体里的Text类文本框的Text值,可提示说在线程里不可以更改文本框的Text值,怎么回事??
不是在同一个命名空间内的吗,还有,我的线程处理方法也是在同一命名空间下的啊.
搞懂,用生成主类的对象来调,也还是不行,晕.
------解决方案--------------------文本框有设成公有的么?
------解决方案--------------------委托
------解决方案--------------------private delegate void DelUpdateText(string text);
private void UpdateText(string text)
{
if(this.InvokeRequired)
{
this.Invoke(new DelUpdateText(UpdateText), new object[]{text});
}
else
{
yourTextBox.Text = text;
}
}
------解决方案--------------------使用代理
------解决方案--------------------bestshl(快乐的Coder) ( ) 信誉:100 Blog 加为好友
的方法是可以的,你试试吧/
------解决方案--------------------支持bestshl(快乐的Coder)
或者用这个函数 this.BeginInvoke(new DelUpdateText(UpdateText), new object[]{text});
------解决方案--------------------this的问题,你这个方法写到另外一个类里了是吗?那就应该使用要刷新的窗体对象,把this换为yourForm
------解决方案--------------------使用Control.Invoke或Control.BeginInvoke方法来进行异步操作。
参考下面的文档:
通过多线程为基于 .NET 的应用程序实现响应迅速的用户
http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/misMultithreading.mspx
为Windows应用创建简单的异步调用模式
http://www.microsoft.com/china/MSDN/library/architecture/AsynCallPattern.mspx