C#如何在另一个类的线程中对Textbox内容进行修改?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#如何在另一个类的线程中对Textbox内容进行修改?相关的知识,希望对你有一定的参考价值。

WinForm是主窗体,
还有一个类Receive,里面定义个一个线程,动态接收string,想将接收的string先是在WinForm的Textbox中,这个要怎么写?
有人说要用委托?

参考技术A 参考如下,主要是对InvokeRequired的应用,下面的代码在线程中显示时间:
private void Form1_Load(object sender, EventArgs e)

Thread th = new Thread(new ParameterizedThreadStart(this.thproc));
th.Start(this);

private void thproc(object obj)

Form1 owner = obj as Form1;
if (owner == null)

return;

while (true)

Thread.Sleep(1000);
owner.SetText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));


delegate void MethodInvoker(string text);
private void SetText(string p)

if (this.InvokeRequired)

MethodInvoker invoker=new MethodInvoker(this.SetText);
this.Invoke(invoker, p);
return;

this.textBox1.Text = p;
追问

Form1 owner = obj as Form1;

抛出异常 未将对象引用设置到对象的实例。

追答

你换成你自己的类型啊,这个只是一个思路。

追问

我换了 还是异常

参考技术B winfrom中,默认不允许跨线程修改控件值,这样做有对安全和性能很差,推荐用 BeginInvoke代理调用, 参考,http://www.csharpwin.com/csharpspace/12024r3622.shtml
如果嫌麻烦,可以用匿名委托和linq的lambda表达式
参考技术C easy but not safe//什么属性具体记不清了Control.CrossThreadxxxCheck=false;追答

关闭线程安全么?

不安全

参考技术D 用委托delegate追问

恩恩 ,那要怎用呢?

C# 中 一个窗体中的texbox内容显示在另一个窗体中的textbox中。如何实现

呜呜~~~~(>_<)~~~~ 大哥大姐,救命啊,感激不尽。。。。

订阅另一个窗口的textbox的事件。
把窗口2的textbox的modifiers属性设为public
在窗口1中订阅窗口二的textbox的KeyUp事件。

窗口1代码:
private void button1_Click(object sender, EventArgs e)

Form2 frm = new Form2();
frm.textBox1.KeyUp += new KeyEventHandler(textBox1_KeyUp);
frm.Show();


void textBox1_KeyUp(object sender, KeyEventArgs e)

TextBox tbox = (TextBox)sender;
this.textBox1.Text = tbox.Text;
参考技术A //自己注意大小写
//form1的代码
from2 f=new form2(texbox1);
f.show();

//form2的代码
textbox tb;
public form2(textbox tb)

InitializeComponent();
this.tb= tb;

private void form2_Load(object sender, EventArgs e)

textbox1.text=tb.text;
//如果要修改form1的texbox1的text
// tb.text="form1的textbox1要修改的值";
参考技术B 可以在项目里添加个(泛型)类,用来窗体中传输数据。 参考技术C request对象

以上是关于C#如何在另一个类的线程中对Textbox内容进行修改?的主要内容,如果未能解决你的问题,请参考以下文章

C# 中 一个窗体中的texbox内容显示在另一个窗体中的textbox中。如何实现

如何在C# winform 中对textbox 实现只读,并且不使其变灰,各位知道的提点下

C#在其它类的线程工更新winForm中的textbox内容?

C#关于定时器和多线程中对控件的操作以及界面假死的现象。

在C#里如何让控件textbox中的内容居中显示呢?

c#程序,textbox如何设置文本居中显示?如何按行读取文本文件内容?