Пожалуйста, опишите, почему вы думаете, что этот ответ только на код помогает решить вопрос.

аю данные из последовательного порта. Данные зашкаливают. Я сейчас пользуюсьReadline() и получение данных сбрасывается даже после того, как я удалилDiscardInBuffer(), Как правильно читать данные с последовательного порта? В Интернете так мало примеров, что я чувствую, что это какой-то святой Грааль, которого никто не понял.

Любая помощь, пожалуйста?

Похоже, последовательный порт - капризный ребенок.

C #, WinCE 5.0, тонкий клиент HP, Compact Framework 2.0

 private void WeighSample()
    {
        this._processingDone = false;
        this._workerThread = new Thread(CaptureWeight);
        this._workerThread.IsBackground = true;
        this._workerThread.Start();
    } //end of WeighSample()


    private void CaptureWeight()
    {
         globalCounter++;
         string value = "";


          while (!this._processingDone)
          {
              try
              {

                 value = this._sp.ReadLine();

                  if (value != "")
                  {
                      if (value == "ES")
                      {
                          _sp.DiscardInBuffer();
                          value = "";
                      }
                      else
                      {
                          this.Invoke(this.OnDataAcquiredEvent, new object[] { value });
                      }
                  }
              }
              catch (TimeoutException)
              {
                  //catch it but do nothing
              }
              catch
              {
                  //reset the port here?
                  MessageBox.Show("some other than timeout exception thrown while reading serial port");
              }
          }


    } //end of CaptureWeight()

Что касается моего приложения, следует отметить, что я запускаю поток (weightSample), когда курсор переходит на текстовое поле. Причиной этого является то, что вес также может быть введен вручную (часть требований). Поэтому я не знаю заранее, собирается ли пользователь нажимать на весах PRINT или вводить вес. В любом случае после получения данных я выхожу из рабочего потока. Также обратите внимание, что я не использую событие последовательного порта DataReceived, так как мне сказали, что это ненадежно.

Любые комментарии / идеи приветствуются. Это мой первый опыт работы с последовательными портами.

Ответы на вопрос(0)

Ваш ответ на вопрос