C# 串口通讯 等待数据返回之后如何继续运行 调用serialPort1.Write()的方法?

这里的串口通讯 需要通过串口给pc传数据,pc再根据传进来的东西进行操作然后再把结果通过串口返回到我的设备里 但是他返回的值在另一个方法里 我怎么着才能 根据返回值 再让上面传输数据调用Write()的那个方法继续往下运行
,求大神们指点.

第1个回答  2014-04-18
同意trustyourself7的:判断下数据是否接受完毕 while (serialPort1.BytesToRead > 0),然后在这后面接着判断读出来的数据
第2个回答  2014-04-18
使用信号量同步追问

您好能详细的说一下吗,我刚才看了一下资料,也许您说的可以行得通.谢谢.

追答

你使用volitate int 定义一个全局变量=0 ,在本程序完成发送后 使用
while(全局变量==0)
{
thread.sleep(100);
}
这样, 当接收线程接收成功则全局变量设置为1 上面的循环就会被打破程序就可以继续了
记得 程序继续后将全局变量重置为0 哦 不然 下次这段程序就不好用了

追问

嗯 好的 谢谢.

本回答被提问者采纳
第3个回答  2014-04-18
程序是写在pc端还是在设备上?追问

程序是在设备上的, 通过usb口转串口 与设备通讯, 设备发指令到pc ,pc根据命令操作之后在通过串口返回给设备, 但是返回结果会在serialPort1_DataReceived() 这个方法里面, 但是上面发送命令的地方需要继续运行.谢谢.

追答

在pc端也需要运行一个程序才对,这个程序在会在serialPort1_DataReceived() 这个方法接收到设备发的指令,pc端接收到指令通过判断后需要再写回给设备就这serialPort1_DataReceived()中继续不是就行吗?相当于pc端的那个程序一直在监听着串口

追问

是这样的,但是 我在设备上发送命令的地方需要根据pc返回的数据继续往下运行,意思就是说得等到 设备的serialPort1_DataReceiced()接收到返回值之后,在根据这个返回值继续往下走.

追答

一样的,设备通过DataReceiced()函数 接收到返回值,通过判断获取到的是什么 再接着往串口写。这样还有问题?

追问

不行的,如果不再发送命令之后做点什么的话,程序会一直走下去的,必须得等待 pc端的数据返回,现在的工作就是 如何等待,又如何监测到数据已经返回.谢谢您.

C# 串口 点击按钮发送数据 但是只要串口有数据过来就跳转到接收处理完接...
把发送指令发到时钟中运行,在定义一个bool变量,如果第一组数据发送并接受到数据后,设置bool变量为true,时钟开始发送第二组数据,例如:bool isReadOk=false;button1_Click(...){ \/\/serial的打开,略;\/\/启动时钟 timer.Interval=100;timer.Start();} timer_Tick(...){ if(!isReadOk){ \/\/...

C# 串口通信问题 我在接收到数据并处理完之后 在txtsend 中会有要发送...
1.你在serialPort1_DataReceived处理事件处理完得到一个返回值(发送值)紧接着就写发送代码 2.你也可以将发送部分写一个方法,在处理完得到返回值时调用发送方法,并把返回值传给发送方法.当然你也可以做成事件,只需要验证返回值有效就触发事件.

c# 数组在方法里赋值后怎么在其他方法里调用
1.将x[i]设置为全局变量 2.将方法private void serialPort1_DataReceived改为private char[] serialPort1_DataReceived,在方法的最后返回x[i],即return x,运用char[] y=serialPort1_DataReceived(null,null)得到x[i]的值

c#如何实现串口通信读取数据
1. 直接调用SerialPort的静态方法GetPortNames()获取当前计算机的串行端口名称数组 2.根据串口名称,初始化SerialPort对象,设置参数,调用Open()方法打开串口 3.调用Write()方法发送数据 4.注册接收数据的监听,获取数据(或者另起线程循环读取接收数据,本文使用注册监听方式接收数据)具体代码实现 using Syste...

C# serialport类编写串口通信程序,无法接收全部数据!
我认为有两种方案可供使用:一、设置一个大小为59的缓存,写一个while循环,只有从串口读满59个字节的数据时才退出while循环,否则继续读取。二、思想跟第一种类似,只是不写while循环,利用调用函数思想,当存满59个字节时,返回true,否则返回false,继续读取串口数据。希望对楼主有用。

C#窜口通信serialPort1.ReadLine()读取不到数据
你代码的只有向外的发送,并没有向本机COM1口发送数据的过程吧。你的串口线是否本机与另一个机器相连,如果这样的话,在另一台机器上打开串口并发送数据,本机再接收就OK了 如果想一台机器做实验的话,可以下载个虚拟串口,模拟2个COM口的链接。

C#读串口的数据,读不全的问题 不懂的千万别说话!
serialPort1.Read(buff, 0, buff.Length);\/\/之后buff里面就是串口接受的数据了,这个时候需要尽快处理掉,\/\/串口缓冲区会被塞满数据导致数据丢失 \/\/假如对数据的处理很复杂,很慢,建议把buff扔到一个缓冲区里面 \/\/并使用另外的一个线程去处理数据,而不是直接在serialPort1_DataReceived这个 \/\/事件...

C#串口两个命令循环发送命令,该返回数据没有返,晓得是返数据模块的问题...
static private byte[] Write(ref SerialPort comPort, byte[] data, int timeOut, int returnLength,ref string error){ try { comPort.DiscardInBuffer();\/\/清除串口接收缓冲区数据,避免外界干扰数据被提取 comPort.Write(data, 0, data.Length);for (int a = 0; a < timeOut; a++){ ...

C#串口编程时,读取数据必须在,串口响应事件中进行吗
mSerialPort.DataReceived += new SerialDataReceivedEventHandler(SerialPort_DataReceived); 这行代码执行后就意味着程序已经另开一线程了.它不会影响主进程的操作,也就是说不会卡死主程序.当你不开线程直接serialPort_jmt.Read的时候如果没有串口响应来的数据那么该方法会一直等待,也就是说回卡住主...

C# SerialPort串口通讯控制道闸,发送数据有动作,但数据接收不到,Data...
用串口调试工具确保代码无误.设置好串口和比特率点击open,然后编辑内容发送.用下面的方法接收.private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { try { if (serialPort1.IsOpen) { StringBuilder strb = new StringBuilder(); ...

相似回答