前两天在项目过程中,遇到一个TCP Server收到数据后在界面更新的需求,主要解决跨线程访问控件问题。
主要包括以下知识点:
1、委托
2、线程
3、Invoke(control中的)
主要思路,通过新的线程中启动tcp监听,通过全局变量保存(传递)更新在控件上的文本,通过委托调用方法,并利用invoke进行跨线程操作控件。
部分代码如下:
private void button2_Click(object sender, EventArgs e)
{
Thread tcpThread = new Thread(new ThreadStart(tcpThreadMethod));
tcpThread.Start();
}
GlobalVar.NewTcpMsgRcv = "server start, waiting for clients";
button2.Invoke(new Del(update));
public void update()
{
listBox1.Items.Add(GlobalVar.NewTcpMsgRcv + DateTime.Now.ToString());
}