2017-09-26 1 views
0

GUIでシリアルポートリスナーを作成したいと思います。 受信したデータをtextBoxに印刷しようとしています。ボタンのプログラムをクリックするとリスニングが始まりますが、すべて動作しますが、textBoxには印刷されません。C# - シリアルポートリスニング - テキストボックスにデータを印刷する方法

void serialPortDataReceived(object sender, SerialDataReceivedEventArgs e) 
     { 
      SerialPort sp = (SerialPort)sender; 
      string indata = sp.ReadExisting(); 
      textBox1.AppendText(indata + "\r\n"); 
     } 

とリスニングを開始するボタンコード:

mySerialPort.BaudRate = 9600; 
mySerialPort.Parity = Parity.None; 
mySerialPort.StopBits = StopBits.One; 
mySerialPort.DataBits = 8; 
mySerialPort.Handshake = Handshake.None; 
mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler); 
mySerialPort.Open(); 

いくつかの助けが必要です:)

+0

あなたはDataReceivedEventからUIを更新することはできません、それは、ワーカースレッド上で起動されます。なぜあなたはInvalidOperationExceptionを取得していない明らかではない、あなたはそれを無効にしていないことを確認してください。 –

+0

多分mySerialPort.ReadTimeoutを変更する必要があります.btwはデフォルトで500msです。多分500では不十分です –

答えて

0

次のようにあなたがRichTextBoxを使用することができます:ここで はEventHandlerコードがある

第一オプション

RichTextBox1.Text += sp.ReadExisting() + "\n"; 

第二オプション - 2番目のオプションは、あなたが言うことができ、メソッドのシグネチャを委任使用しています。

public delegate void AddDataDelegate(String myString); 
public AddDataDelegate myDelegate; 

private void Form1_Load(object sender, EventArgs e) 
{ 
    this.myDelegate = new AddDataDelegate(AddDataMethod); 
} 

public void AddDataMethod(String myString) 
{ 
    TextBox1.AppendText(myString); 
} 

private void SerialPortDataReceived(object sender, SerialDataReceivedEventArgs e) 
{ 
    SerialPort sp = (SerialPort)sender; 
    string s= sp.ReadExisting(); 

    TextBox1.Invoke(this.myDelegate, new Object[] {s});  
} 
関連する問題