読者です 読者をやめる 読者になる 読者になる

スレッドセーフにWindowsフォームコントロールにアクセスする

IT

今日仕事で、Bluetoothを使ってパソコンと携帯で通信するプログラムを作ってました。
内部的にはBluetoothはCOMポートとして扱います。
SerialPort.DataReceivedイベントでデータを受信したときにTextBoxのTextを書き換えようと思ったら
そこで「コントロールが作成されたスレッド以外のスレッドからコントロール(コントロール名)がアクセスされました。」
というメッセージでInvalidOperationExceptionの例外が発生。
なるほど、Windowsフォームコントロールはスレッドセーフじゃないのかというのと
COMポートの通信は別スレッドが立ち上がってるのねということに気付きました。


この解決策を検索したところ、MSDNにどんぴしゃな情報がありました。
方法 : Windows フォーム コントロールのスレッド セーフな呼び出しを行う
この通りやったらうまくいきました。


今まで、スレッドセーフって意味は知ってたけど特に意識したことがなかったので
勉強になりました。