2022/07/13(Wed) 18:20:57 編集(投稿者)
<pre><pre>■No100246 (初心者侍 さん) に返信
> private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
> {
> string data = serialPort1.ReadLine();
> Response(data);
> }
ReadLine だと、'\n' を受信するまで待機します。
「SerialPort.ReadLine メソッド」
https://docs.microsoft.com/ja-jp/dotnet/api/system.io.ports.serialport.readline?view=dotnet-plat-ext-6.0
にあるように、 ReadTimeout プロパティを設定して、 TimeoutException が発生するようにしたほうが良いです。
私だったら、
private readonly StringBuilder buffer = new StringBuilder();
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) {
SerialPort port = (SerialPort)sender;
string recieveData = port.ReadExisting();
lock (buffer) {
foreach (char c in recieveData) {
if (c == '\n') {
BeginInvoke((Action<string>)Response, buffer.ToString());
buffer.Clear();
} else {
buffer.Append(c);
}
}
}
}
private void Response(string text) {
textBox1.AppendText(text + "\n");
}
のように、受信済みのデータのみ処理するよう作ると思います。