C# 为什么serialPort\u DataReceivedevent会提高两倍?

C# 为什么serialPort\u DataReceivedevent会提高两倍?,c#,C#,我在串行端口上使用此事件,但当此事件侦听端口上的数据时,它会出现,但事件会再次引发,因此会破坏数字。我是否需要将数据保存在某个地方,防止它再次被炒鱿鱼……因为铃声持续时间很长,所以我应该如何阅读一次,并在前面停止收听 private void serialPortNEW_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { Serial

我在串行端口上使用此事件,但当此事件侦听端口上的数据时,它会出现,但事件会再次引发,因此会破坏数字。我是否需要将数据保存在某个地方,防止它再次被炒鱿鱼……因为铃声持续时间很长,所以我应该如何阅读一次,并在前面停止收听

  private void serialPortNEW_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
            {

                SerialPort sp = (SerialPort)sender;
                string indata = sp.ReadExisting();
                string[] strFirstStep = Regex.Split(indata, "\r\nNMBR =");
                string[] strLastStep = Regex.Split(strFirstStep[1], "\r\n");
                string FinalValue = strLastStep[0];

                custNUmber = int.Parse(FinalValue);

                bw = new BackgroundWorker();
                bw.DoWork += new DoWorkEventHandler(bw_DoWork);
                bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
                bw.RunWorkerAsync();
            }

在同一数据上提高两次?这只有在您订阅了两次DataReceived事件时才有可能。但如果环很长,当我将Debugger放入此环时,当它第一次完成并读取数字时,从最后一行开始,它会重新到达同一事件,而我没有订阅它两次。通常,串行端口是流式的,可以对输入数据的任何部分调用is-DataReceived事件-对于每个字节,或者一次调用1000个字节,这是未定义的。您的算法必须足够灵活才能处理此问题。我应该怎么做?我应该如何避免它?如果环很长,我的程序可以将其保留在缓冲区中并停止侦听。。我的意思是这和长戒指有关。它被举起了很多次。您所犯的错误是希望ReadExisting()会给出完整的响应。没有。由于数据中似乎有换行符,因此使用ReadLine()是一个简单的解决方法。