スレッドセーフにWindowsフォームコントロールにアクセスする
今日仕事で、Bluetoothを使ってパソコンと携帯で通信するプログラムを作ってました。
内部的にはBluetoothはCOMポートとして扱います。
SerialPort.DataReceivedイベントでデータを受信したときにTextBoxのTextを書き換えようと思ったら
そこで「コントロールが作成されたスレッド以外のスレッドからコントロール(コントロール名)がアクセスされました。」
というメッセージでInvalidOperationExceptionの例外が発生。
なるほど、Windowsフォームコントロールはスレッドセーフじゃないのかというのと
COMポートの通信は別スレッドが立ち上がってるのねということに気付きました。
この解決策を検索したところ、MSDNにどんぴしゃな情報がありました。
Download Visual Studio 2005 Retired documentation from Official Microsoft Download Center
この通りやったらうまくいきました。
今まで、スレッドセーフって意味は知ってたけど特に意識したことがなかったので
勉強になりました。