串行端口数据仅在断点设置为C#时工作

时间:2015-03-20 07:08:28

标签: c#

我正在尝试从串口读取数据。它在我设置断点时读取数据。

我尝试过使用父委托调用,也有一些延迟。它对我不起作用。

这是我的代码

从类文件中读取代码:

        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();

1 个答案:

答案 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...
    }
}

根据事件引发行为的工作原理,如果事件在第一次被触发后没有被重新提升,你可能需要自己在额外的缓冲区中累积数据......但这应该很容易测试和适应。