首页上一页 1 下一页尾页 2 条记录 1/1页
serialport收发数据(再次请教)
发表在C#图书答疑
2010-10-26
是否精华
是
否
版块置顶:
是
否
[font color=#FF0000][font color=#00FF00][font color=#FF0000]老师您好:
我做一个程序,控制界面有两个button。
想要实现:
button1按钮按下,则timer1.start(),timer1的tick事件是利用serialport串口读下位机(PLC)数据(主要是读取PLC的输入端口状态),不断的采集数据。
在不断采集数据的过程中,按下button2按钮,timer1.stop(),向plc发送指令,控制其输出端口。发送一个指令后,timer1.start(),继续循环读取PLC的输入端口状态。
我做的程序基本实现以上功能,可是有时按下button2按钮,则不向plc发送指令,有时又好用。请问老师这是怎么回事?怎么解决?
或者您给我提供一些他的的方法![/font][/font]
读者朋友:
您好,你可以把button1按钮Click事件中要执行的代码写一个线程中执行,因为我感觉你这个问题是由于button1执行过程中,可能会出现假死的状态,导致有时候可以单击button2,但有时候单击不上button2。
[/font]
[font color=#00FF00][font color=#0000FF]我的做法:
private void button1_Click(object sender, EventArgs e)
{
th1 = new Thread(new ThreadStart(Run1)); //Run1中是循环发送命令,采集数据
th1.Start();
}
private void button2_Click(object sender, EventArgs e)
{
th1.Abort();
while (serialPort1.IsOpen)
{
serialPort1.DiscardInBuffer();
serialPort1.DiscardOutBuffer();
}
serialPort1.Close();
Application.DoEvents();
System.Threading.Thread.Sleep(100);
th2 = new Thread(new ThreadStart(Run2)); //Run2中是发送指令
th2.Start();
System.Threading.Thread.Sleep(100);
while (serialPort1.IsOpen)
{
serialPort1.DiscardInBuffer();
serialPort1.DiscardOutBuffer();
}
serialPort1.Close();
Application.DoEvents();
th1 = new Thread(new ThreadStart(Run1));
th1.Start();
} [/font]
[font color=#0000FF]我采用两个线程,当按下button2时,想停止线程th1,开始th2,可有时候button2按下去不响应,但是比之前好了很多。请问老师,我的思路是否正确?如果行,怎么改一下程序让button2不会产生不响应的状况。[/font][/font]
我做一个程序,控制界面有两个button。
想要实现:
button1按钮按下,则timer1.start(),timer1的tick事件是利用serialport串口读下位机(PLC)数据(主要是读取PLC的输入端口状态),不断的采集数据。
在不断采集数据的过程中,按下button2按钮,timer1.stop(),向plc发送指令,控制其输出端口。发送一个指令后,timer1.start(),继续循环读取PLC的输入端口状态。
我做的程序基本实现以上功能,可是有时按下button2按钮,则不向plc发送指令,有时又好用。请问老师这是怎么回事?怎么解决?
或者您给我提供一些他的的方法![/font][/font]
读者朋友:
您好,你可以把button1按钮Click事件中要执行的代码写一个线程中执行,因为我感觉你这个问题是由于button1执行过程中,可能会出现假死的状态,导致有时候可以单击button2,但有时候单击不上button2。
[/font]
[font color=#00FF00][font color=#0000FF]我的做法:
private void button1_Click(object sender, EventArgs e)
{
th1 = new Thread(new ThreadStart(Run1)); //Run1中是循环发送命令,采集数据
th1.Start();
}
private void button2_Click(object sender, EventArgs e)
{
th1.Abort();
while (serialPort1.IsOpen)
{
serialPort1.DiscardInBuffer();
serialPort1.DiscardOutBuffer();
}
serialPort1.Close();
Application.DoEvents();
System.Threading.Thread.Sleep(100);
th2 = new Thread(new ThreadStart(Run2)); //Run2中是发送指令
th2.Start();
System.Threading.Thread.Sleep(100);
while (serialPort1.IsOpen)
{
serialPort1.DiscardInBuffer();
serialPort1.DiscardOutBuffer();
}
serialPort1.Close();
Application.DoEvents();
th1 = new Thread(new ThreadStart(Run1));
th1.Start();
} [/font]
[font color=#0000FF]我采用两个线程,当按下button2时,想停止线程th1,开始th2,可有时候button2按下去不响应,但是比之前好了很多。请问老师,我的思路是否正确?如果行,怎么改一下程序让button2不会产生不响应的状况。[/font][/font]