winform 多个计时器操作问题
目的:通过modbus TCP/IP 协议访问服务器端
过程:现在有2个计时器,分别传不同的指令,向服务器请求,如下代码:
请求
private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
c.send("09 20 00 0A", "03");//发送请求指令
ReciveData1();
private void timer2_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
c.send("09 34 00 0A", "03");//发送请求指令
ReciveData2();
}
接收:
//从线程池接受响应数据(读T1-T10:Actual)
private void ReciveData1()
{
ThreadPool.QueueUserWorkItem(new WaitCallback(LongTask1));
}
//从线程池接受响应数据(读T1-T10:Setpoint)
private void ReciveData2()
{
ThreadPool.QueueUserWorkItem(new WaitCallback(LongTask2));
}
public void LongTask1(object obj)
{
string[] strReceive = new string[10];
strReceive = c.receive();
this.label65.Text = strReceive[0];
this.label64.Text = strReceive[1];
this.label63.Text = strReceive[2];
this.label62.Text = strReceive[3];
this.label61.Text = strReceive[4];
this.label60.Text = strReceive[5];
this.label59.Text = strReceive[6];
this.label58.Text = strReceive[7];
this.label57.Text = strReceive[8];
this.label56.Text = strReceive[9];
}
public void LongTask2(object obj)
{
string[] strReceive = new string[10];
strReceive = c.receive();
this.label53.Text = strReceive[0];
this.label52.Text = strReceive[1];
this.label51.Text = strReceive[2];
this.label50.Text = strReceive[3];
this.label49.Text = strReceive[4];
this.label48.Text = strReceive[5];
this.label47.Text = strReceive[6];
this.label46.Text = strReceive[7];
this.label45.Text = strReceive[8];
this.label44.Text = strReceive[9];
}
问题:如何通过队列,或者锁,对他们响应的数据进行异步处理。
现在的结果是响应回来的数据,不能异步显示,会产生交叉显示。
如: this.label65.Text =60,......
this.label53.Text =50,......
会出现这样的结果:
this.label65.Text =50,......
this.label53.Text =60,......