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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#在其它类的线程工更新winForm中的textbox内容?相关的知识,希望对你有一定的参考价值。

代码是这样子,应该怎么做?
public partial class MainForm : Form


public MainForm ()

InitializeComponent();
TCPServer.Instance.Start();



class TCPServer

public bool Running = false;
static TCPServer _instance = null;
public static TCPServer Instance

get

if (null == _instance)

_instance = new TCPServer();

return _instance;


public void Start()


try

Thread th = new Thread(listenerProc);
th.IsBackground = true;
th.Start();

catch (Exception ex)



void listenerProc()

while (true)

//在这里更新TextBox的内容,比如TextBox.text="refresh";


首先你应该把Mainform里的TextBox对象(假设叫做textBox1)保存在TCPServer.Instance里;其次由于是后台线程,所以不能直接对textBox1的text赋值,应该这样:
void listenerProc()

while (true)

textBox1.Invoke( new EventHandler( delegate textBox1.Text = "xxxxx"; ) );

追问

把Mainform里的TextBox对象(假设叫做textBox1),这个怎么保存?

追答

加一个public字段就行了:
class TCPServer

public bool Running = false;
static TCPServer _instance = null;
public TextBox m_Textbox;

调用的地方:
public MainForm ()

InitializeComponent();
TCPServer.Instance.m_Textbox = this.textbox1;
TCPServer.Instance.Start();

追问

我的是 textBox1没有Invoke?

参考技术A 可以用BeginInvoke方法。追问

具体该怎么用啊?

参考技术B 委托,最先想到的。。。

以上是关于C#在其它类的线程工更新winForm中的textbox内容?的主要内容,如果未能解决你的问题,请参考以下文章

c#如何根据文件数量控制进度条

我用C# winform多线程,窗口就假死,等到线程全部完成了才可以点击。请问要怎么才可以让窗口不假死。

C#关于winform线程更新form的文本框输出的问题

C# winform 多线程更新数据,UI卡顿现象。

C# Winform 跨线程更新UI控件常用方法汇总

C# WINFORM 线程中更新UI