C# RS-232不稳定行为-跟进

C# RS-232不稳定行为-跟进,c#,serial-port,C#,Serial Port,请原谅我的无知…我所做的一定很简单,但它不“合乎逻辑”。如你所知,我正在处理一个“串行”设备。我用VisualBasic尽了我所能,但它对我不起作用,所以我在c#工作。我遇到了以下代码: string[] RawData = new string[205]; _serialPort.Write("D5\r\n"); 第一次尝试:硬编码201次 RawData[0] = _serialPort.ReadLine();

请原谅我的无知…我所做的一定很简单,但它不“合乎逻辑”。如你所知,我正在处理一个“串行”设备。我用VisualBasic尽了我所能,但它对我不起作用,所以我在c#工作。我遇到了以下代码:

            string[] RawData = new string[205];

            _serialPort.Write("D5\r\n");
第一次尝试:硬编码201次

            RawData[0] = _serialPort.ReadLine();
            RawData[1] = _serialPort.ReadLine();
            RawData[2] = _serialPort.ReadLine();
            RawData[3] = _serialPort.ReadLine();
            RawData[4] = _serialPort.ReadLine();
            RawData[5] = _serialPort.ReadLine();
            RawData[6] = _serialPort.ReadLine();
            RawData[7] = _serialPort.ReadLine();
            RawData[8] = _serialPort.ReadLine();
            RawData[9] = _serialPort.ReadLine();
            //....x 201 times
            RawData[201] = _serialPort.ReadLine();
第二次尝试:

            for (int i = 0; i <= 202; i++)
            {
                RawData[i] = _serialPort.ReadLine();
                // Thread.Sleep(500);
            }

for(int i=0;i此
for
循环:

for (int i = 0; i <= 202; i++)

for(int i=0;i正如@Ondrej Tucny所说,您可能正在进行更多调用,而
SerialPort
正在等待它,因此您无法传递到下一条指令

如果这是问题所在,我建议不要使用
ReadLine

ReadLine
不好,因为它将“等待”直到收到下线,并且在串行端口中设置了超时

如果您不知道将获得多少数据,
ReadLine
是个坏主意。每次调用它时,您可能需要挂起,直到它超时,或者在收到EOL时幸运地通过

我建议你使用或


另一个解决方法是将您的设置足够小,并捕获
TimeoutException
,这样进程就不会等待。

我不想说…(不介意我看起来像个傻瓜…)控件从未回到我身边的原因是,通过循环201次,我在不知不觉中试图检索“不存在”的数据从设备上——我脸上的蛋。我必须检查我的201个手动读线语句…以发现,在某个点上,我也失去了控制?我开始插入断点50、100、150,然后是200,以注意到有一个点超过该点,程序将停止响应。通过查看捕获的数据,它开始变得有意义(我可以看到‘逻辑’——哈!哈!哈!)。因此,我删除了我的201条重复的、难看的语句,只是将循环最大值更改为176,所有内容都是hunky dorey。感谢您的耐心。

上面可能不清楚,但要么我手动执行201 ReadLine()声明或我循环201次-我的代码不做这两个。我上面展示的方式是为了说明目的(如果有人问),在你的11个问题中,你有5个答案,但是没有一个被接受。请考虑接受和投票好的答案。你能详细说明“所有的赌注都掉了”。?您的进程在读取时卡住了还是抛出了任何异常?Ondrej,您的思路是对的!!!我尝试了读取,实际上这是我用来从设备获取“其他类型数据”的指令,但读取对这组数据无效(出于某种原因)。我尝试了“ReadExisting”在某些情况下,但这并没有起作用。感谢您的参与,路易斯:-)然后设置较低的ReadTimeout在您的情况下更好。如果您不想处理脏活。