Vb.net 使用SerialPort.ReadExisting()从串行端口接收无效数据

Vb.net 使用SerialPort.ReadExisting()从串行端口接收无效数据,vb.net,windows-mobile,bluetooth,Vb.net,Windows Mobile,Bluetooth,我在.NET中编写了一个程序,用于侦听特定的串行端口并处理接收到的数据。我使用serialport控件编写了一个测试程序,程序运行良好。 当我使用原始设备在Windows Mobile中运行程序时,收到的数据被篡改了。当与PC连接时,相同的设备产生所需的输出 在手机中,我用蓝牙连接了我们的设备。 我收到以下乱码字符串:“?09?D0?6D? 我使用了以下代码: Dim WithEvents port1 As SerialPort = _ New SerialPort("Com2", 192

我在.NET中编写了一个程序,用于侦听特定的串行端口并处理接收到的数据。我使用serialport控件编写了一个测试程序,程序运行良好。 当我使用原始设备在Windows Mobile中运行程序时,收到的数据被篡改了。当与PC连接时,相同的设备产生所需的输出

在手机中,我用蓝牙连接了我们的设备。
我收到以下乱码字符串:
“?09?D0?6D?

我使用了以下代码:

 Dim WithEvents port1 As SerialPort = _
  New SerialPort("Com2", 19200, Parity.Even, 7, StopBits.One)

 port1.Open()
        port1.Open()
        strcmd="09RD00000123"
        port1.Write(strcmd, 0, strcmd.Length)
        System.Threading.Thread.Sleep(70)
        strReadSegment0 = port1.ReadExisting

您忘了说您希望输入什么。在收到的数据中看到问号表明SerialPort.Encoding属性设置不正确。它默认为ASCII,任何值介于128和255之间的字节都将变成问号。可能您实际上不想接收字符,可能您需要字节。请使用Read()

关于问号的另一种解释是,设备的串行端口配置与机器的串行端口配置不匹配。波特率不匹配会产生乱码数据,这可能会变成问号,如上所述。奇偶校验不匹配也会产生问号

最后但并非最不重要的一点是,不能使用Sleep()将线程与串行端口可靠地同步。请改用DataReceived事件