私の問題は、UI スレッドとは別のスレッドの TextBox.text を大量に変更することです。このような:
string bufferSerial;
.
.
.
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
bufferSerial += serialPort1.ReadLine();
TextBox1.text = bufferSerial;
TextBox2.text = bufferSerial;
TextBox3.text = bufferSerial;
TextBox4.text = bufferSerial;
TextBox5.text = bufferSerial;
TextBox6.text = bufferSerial;
TextBox7.text = bufferSerial;
.
.
.
.
.
.
TextBoxN.text = bufferSerial;
}
これを実行しようとすると、エラーが発生します: コントロール 'textBox1' は、作成されたスレッド以外のスレッドからアクセスされました。
単一の TextBox を変更するには、次のソリューションを使用できます。
delegate void SetTextCallback(string text);
private void SetText(string text)
{
// InvokeRequired required compares the thread ID of the
// calling thread to the thread ID of the creating thread.
// If these threads are different, it returns true.
if (this.textBox1.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
}
else
{
this.textBox1.Text = text;
}
}
次に、次のように関数を呼び出します。
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
bufferSerial += serialPort1.ReadLine();
SetText(bufferSerial);
}
しかし、多くの BoxText を変更する必要がある場合は、それぞれに対して 1 つの関数を作成する必要がありますか?
ご協力ありがとう御座います!よろしくお願いします。