2017-04-07 8 views
-1

シリアルポートを読み書きしようとしていますが、バッファをクリアできないようです。 私はDiscardIn/Outメソッドを無駄にしようとしました。シリアルポートから送信されたデータは、クリアされているはずのバッファでオフセットされています。シリアルポートからの読み取り中にスタックオーバーフローが発生する

  public static SerialPort serialPort; 


      public static StringBuilder sendData { get { return sendData; } set { sendData = value;if (sendData.Equals("q")) quitEvent(); } } 

      static void Main(string[] args) 
      { 

       del ex = new del(StopThread); 

       serialPort = new SerialPort(); 
       serialPort.PortName = "COM3"; 
       serialPort.BaudRate = 9600; 
       serialPort.ReadTimeout = 2000; 
       _continue = true; 
       serialPort.Open(); 
       serialPort.DiscardInBuffer(); 
       serialPort.DiscardOutBuffer(); 

       Thread readthread = new Thread(ReadFromSerial); 
       Thread writethread = new Thread(WriteToSerial); 

       readthread.Start(); 
       writethread.Start(); 

       readthread.Join(); 
       writethread.Join(); 
       serialPort.Close(); 

       Console.ReadLine(); 

      }    

答えて

0

通常のプロパティと自動プロパティを混同しています。書かれているように、StringBuilderの実際のsendDataメンバー変数はありません。 sendDataのgetterとsetterは再帰的に自分自身を呼び出すため、最終的にスタックのオーバーフローが発生します。それはすぐにスタックオーバーフローの問題が修正されますが

private static StringBuilder _sendData; 
public static StringBuilder sendData { 
    get { return _sendData; } 
    set { 
     _sendData = value; 
     if (_sendData.Equals("q")) quitEvent(); 
    } 
} 

を、それ以外の問題は、あなたがStringBuilderのを作成しますか?なぜQためのテスト中である場合(同様にあります。

これは、より良い仕事でしょうsetter?、あなたはConsole.ReadLine()などで何もしません)。しかし、私はこれらが別々の質問だと思う。

+0

私の誤りは私が自動プロペラを訂正しました。イベントはトリガされません。私は彼がシリアルポートから受け取ったもので設定されていると思うのですが、 "q"を押すと、受信した回線。 –

関連する問題