SerialPort.BytesToRead一直为0,可是串口通讯工具是有数据的

程序猿的进化 2015-09-28 04:11:08

public static string InitSerialPort()
{
port1.PortName = “com3”
port1.BaudRate = 19200;//波特率
port1.DataBits = 8; //数据位
port1.Parity = Parity.None;//无奇偶校验位
port1.StopBits = StopBits.One; //一个停止位
port1.ReadBufferSize = 40; //接收缓冲区大小
//port1.Handshake = Handshake.RequestToSend;//控制协议
port1.Encoding = Encoding.BigEndianUnicode;//设置编码格式
port1.ReceivedBytesThreshold = 1;//设置内部输入缓冲区的字节数
if (port1.IsOpen)
{
port1.Close();
}
try
{
port1.Open();
}
catch
{
return "请打开设备!";
}
return null;
}
public static Glud gludess
{
byte[] bytesData = new byte[]{};
if (port1.BytesToRead > 0)
{
byte firstByte = Convert.ToByte(port1.ReadByte());
int bytesRead = port1.BytesToRead;
bytesData = new byte[bytesRead + 1];
bytesData[0] = firstByte;
for (int i = 1; i <= bytesRead; i++)
{
bytesData[i] = Convert.ToByte(port1.ReadByte());
}
}
}

每次到红色的地方,就停住了,bytestoread总是为0,什么情况?
...全文
1832 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wn2891 2017-09-07
  • 打赏
  • 举报
回复
唉,请问楼主的问题解决了吗……
程序猿的进化 2015-09-28
  • 打赏
  • 举报
回复
private void button3_Click(object sender, EventArgs e)
        {
            var str =GetBloodGlu.InitSerialPort();
            System.Threading.Thread.Sleep(2000)
                if (string.IsNullOrEmpty(str))
                {
                    var glu = GetBloodGlu.gludess();
                    lblglu.Text = glu.value;
                }
                else
                {
                    MessageBox.Show("请打开机器!");
                }
            }
        }
这是点击得到数据的代码,最上面的是是里面的两个方法 glu是个model里面只有userno、value
  • 打赏
  • 举报
回复
为啥我看你的方法都不全,能贴全吗?如果涉及敏感数据,可以删除或替换,但不要让代码编码都不过啊
exception92 2015-09-28
  • 打赏
  • 举报
回复
你的 数据接收事件呢??
程序猿的进化 2015-09-28
  • 打赏
  • 举报
回复
if (port1.BytesToRead > 0) 到这个位置就显示bytestoread为0了,没有报错

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧