Serial Port ReadLine vs ReadExisting ou comment lire correctement les données du port série

Je suis de la lecture des données à partir du port série. Les données proviennent hors de l'échelle. Je suis maintenant en utilisant Readline() et l'obtention de données supprimés, même après que j'ai enlevé DiscardInBuffer().
Quelle est la bonne façon de lire les données sur le port série? Il y a si peu d'exemples en ligne que je ressens c'est comme une quête du graal que personne n'a compris.

Toute aide, s'il vous plaît?

Semble que le port série est un enfant capricieux.

C#, WinCE 5.0, HP client léger, 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()

Une chose à noter à propos de ma demande est que je démarre le thread (weighSample) lorsque le curseur se déplace sur la zone de texte. La raison à cela est que le poids peut également être saisi manuellement (une partie de la req). Donc je ne sais pas à l'avance si un utilisateur est d'aller sous presse, d'IMPRESSION sur l'équilibre ou le type de poids. Dans les deux cas, une fois les données acquises, je quitte le thread de travail. Notez également que je ne suis pas à l'aide du port série événement DataReceived, depuis que j'ai été dit qu'il n'est pas fiable.

Tous les commentaires/idées de bienvenue. C'est ma première expérience avec les ports série.

source d'informationauteur sarsnake