日期:2014-05-19  浏览次数:20901 次

如何在另一线程中修改窗体中控件的内容
如我单击一个命令按钮,事件里生成一个新线程,我想在那个线程里更改窗体里的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