私のプログラムの一部は、シリアルポートの受信データにイベントハンドラーを使用しています。データを受信すると、受信したテキストがテキストボックス(rx)に追加されるという考え方です。以前はこの問題を抱えていませんでしたが、何かが変わって何がわからないのです。だから今、私はこれが処理される方法を再検討しています。
私のwinformのフォームロード中に、私が最後に行うことは
if (!serialPort1.IsOpen)
{
serialPort1.Open();
serialPort1.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
}
次に、イベントハンドラーがあります
private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
string indata1 = serialPort1.ReadExisting();
// rx.Text = " "; accidentally posted this. it was from trial and error.
rx.AppendText(Environment.NewLine + indata1);
}
プログラムを実行すると、で停止しrx.AppendText(Environment.NewLine + indata1);
、エラーが発生します
invalidoperationexceptionは処理されませんでした:コントロールは、作成されたスレッド以外のスレッドからアクセスされました。
私が読むことができたものから、私はinvoke
またはを使用する必要があることを示唆していますBeginInvoke
。
私はこれまでテキストの追加に問題があったことがないので、なぜそれが問題なのか理解できません。また、私が呼び出しについて読んでいることから、私はそれを理解していません。
誰かが私の状況でinvokeインスタンスを使用する方法を理解するのを手伝ってもらえますか?または、テキストボックスを追加する別の方法を教えてください。