C# 跨线程调用窗体控件有关问题
C# 跨线程调用窗体控件问题
有两个线程,主线程接收数据,子线程显示在richtextbox中。在跨线程调用过程中,子线程显示数据的程序运行较快,主线程接收数据的程序运行较慢,这就导致了在新数据的到来之前,子线程重复不断的显示上一次的数据。请问各位大牛,有什么好方法控制子线程不要重复显示。
主线程代码:
子线程代码
------解决思路----------------------
采用事件机制,主线程接收到数据,触发子线程显示事件。
------解决思路----------------------
委托函数里怎么有while(true)???
这是坑爹的代码啊
有两个线程,主线程接收数据,子线程显示在richtextbox中。在跨线程调用过程中,子线程显示数据的程序运行较快,主线程接收数据的程序运行较慢,这就导致了在新数据的到来之前,子线程重复不断的显示上一次的数据。请问各位大牛,有什么好方法控制子线程不要重复显示。
主线程代码:
private void btnConnect_Click(object sender, EventArgs e)
{
NetConnect netConnect = new NetConnect(); //实例化类
netConnect.Connect(t0, ServerIP.Text, ServerPort.Text); //调用子函数进行网络连接
netConnect.Read(); //连接成功,接收数据
MessagePrintThread = new Thread(new ThreadStart(rtbThreadFlush)); //接收到的数据显示在rtb控件上
MessagePrintThread.Start(); //启动线程
}
子线程代码
private void rtbThreadFlush()
{
while (true)
{
Thread.Sleep(200); //等待异步操作完成
FlushThreadFunction(); //调用此线程的功能函数,进行刷新
}
}
private void FlushThreadFunction()
{
//查询rtb控件的 InvokeRequired 属性,为true,用委托调用;为false,直接调用。
if (this.rtb.InvokeRequired)
{
rtbFlush flush = new rtbFlush(FlushThreadFunction);
this.Invoke(flush); //通过代理调用刷新方法
}
else
{
this.rtb.AppendText(NetConnect.content); //直接调用
}
}
------解决思路----------------------
采用事件机制,主线程接收到数据,触发子线程显示事件。
------解决思路----------------------
委托函数里怎么有while(true)???
这是坑爹的代码啊