我正在尝试从串口读取数据。它在我设置断点时读取数据。
我尝试过使用父委托调用,也有一些延迟。它对我不起作用。
这是我的代码
从类文件中读取代码:
public void comport_DataReceived2(object sender, SerialDataReceivedEventArgs e)
{
var bytes = comport.BytesToRead;
var buffer = new byte[bytes];
string test2 = comport.ReadExisting();
if (IsReadPDSS)
{
if(test2 != string.Empty && test2 != " " && test2.Length > 30)
{
test2 = test2.Substring(30);
test2.Replace("000000000000P0000W", "");
strReceived += test2;
}
}
else
{
strReceived = test2;
}
}
windows窗体重新读取数据:
string ss = FormObj.strReceived.ToString();
答案 0 :(得分:0)
进行应用程序调试时,系统并未完全冻结。只有您调试的应用程序。因此,当您的应用程序处于断点时,串行端口上的传入数据仍在累积中。
控制流程有点模糊(可能是因为您在查找问题时将其更改了几次)。正如现在所写,每当引发事件时,您都会从串口读取数据。在您读取数据时,不太可能有30个字节到达。如果您进入调试器并进行单步执行,则更有可能在接收缓冲区中找到超过30个字节(取决于您的设备传输的内容)。
因此,编写控制流的更好方法如下:
public void comport_DataReceived2(object sender, SerialDataReceivedEventArgs e)
{
var bytes = comport.BytesToRead;
if( bytes > 30 )
{
var test2 = comport.ReadExisting();
// additional testing code as required...
}
}
根据事件引发行为的工作原理,如果事件在第一次被触发后没有被重新提升,你可能需要自己在额外的缓冲区中累积数据......但这应该很容易测试和适应。