已有56人关注
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]
分享到:
精彩评论 3
gaopeng218
学分:0 LV1
TA的每日心情
开心
2023-09-05 11:07:10
2010-10-26
沙发
东方老师:
    您好,我学C#是从《C#开发实战宝典》学起的,不但因为书中内容讲的好,还有视频,更好的是有:明日科技(国内一流的IT技术平台)。可以直接和老师交流。我问的问题是书中内容延伸的。只能是书中的内容才帮忙解决?那怎么打造国内一流的IT技术平台?只能打造国内一流的卖书平台。
    我的问题我在网上看了些资料,不是特别好解决,所以我认真的总结后,发本网站来问。熟悉网站的人知道,你们一般在晚上回复问题,盼望一天后,你这个东方老师这样回复我!
    我的问题是想问一下这种思路能不能通。这会影响其他读者的服务?
    请问,卖书就是仅仅为了卖书吗?出书不就是让更多人学习嘛!
    
小科_mrkj
学分:43 LV2
2010-10-26
板凳
读者朋友:
    您好,很对不起上次回复没能解决你的问题,你的总体思路是对的,只是在button2的Click中不应该终止线程,你可以使用Suspend方法挂起线程,然后再使用Resume方法恢复线程,请用我说的这种方法再试一下。再次表示抱歉,这里替东方向您道一下歉,希望您能接受,非常感谢你对我们的信任。
gaopeng218
学分:0 LV1
TA的每日心情
开心
2023-09-05 11:07:10
2010-10-26
地板
小科老师:
谢谢您!
我手里还有《C#程序开发范例宝典》,应该算是您的忠实读者,我会一如既往看准:明日科技,王小科。谢谢您!~
首页上一页 1 下一页尾页 3 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照