2 回答
TA贡献1811条经验 获得超4个赞
一般来说,您应该避免使用 ReadExisting,它存在已知问题,特别是当传入的流包含二进制数据时。这是我所做的:
this.SerialDevice = new SerialPort(this.Port);
this.SerialDevice.BaudRate = 115200;
this.SerialDevice.DataReceived += OnDataReceived;
this.SerialDevice.Open();
...
private void OnDataReceived(object sender, SerialDataReceivedEventArgs e)
{
var serialDevice = sender as SerialPort;
var buffer = new byte[serialDevice.BytesToRead];
serialDevice.Read(bytes, 0, buffer.Length);
// process data on the GUI thread
Application.Current.Dispatcher.Invoke(new Action(() => {
... do something here ...
}));
}
TA贡献1827条经验 获得超9个赞
您应该将 SerialPortCommunications 类的对象放在一个新线程中,然后开始从 COM 端口读取数据。此外,如果您需要来自 WPF 中 COM 端口的数据,例如 TextBlock,您需要在 SerialPortCommunications 类中创建一个事件,并在 WPF 中创建一个事件处理程序。但是在该处理程序中,您将需要使用 Dispatching 来显示该 TextBlock 中的数据。
- 2 回答
- 0 关注
- 722 浏览
添加回答
举报