Illegal cross-thread operation 例外
.NET Framework のコントロールはほとんど?スレッドセーフではないので、コントロールがコントロール以外のスレッドからアクセスするのは許されていないのだけど、VS.2002, 2003 ではスレッド外からアクセスしたとしても、フレームワークでノーチェックでした。でも.NET Framework 2.0 ではしっかり例外(InvalidOperationException: cross-thread )をあげてくれますね。
以前作ったプログラムをVS2005 でコンパイル&実行してみてわかりました。つまり非同期プログラミングをちゃんとしていなかったのがばれたというか、教えてくれる!
VS2003以前では、自分でチェックコードを書かないと正しく動作しているのかわからないけど、今度からは問題があればシステム側が捕まえてくれるので、それはそれで評価できる。
でも、コントロールをスレッドセーフに設計してもらいたいな。それでないと毎回非同期で組まないといけなくって、結構めんどくさい。
あがった例外はこんな感じ。
-----
InvalidOperationException
cross-thread : Control 'statusBar1' accessed from a thread other than the thread it was created on.\r\nStack trace where the occurred was:
.....
コールスタック情報
.....
投稿日時 : 2004年11月17日 0:24
Tweet

コメントを追加
# re: Illegal cross-thread operation 例外 2004年11月17日 20:31 中 博俊
Windows的に難しい模様# re: Illegal cross-thread operation 例外 2004年11月22日 10:43 渋木宏明(ひどり)
ごく単純な意味でスレッドセーフにすればいいってもんじゃないですからね>コントロール# re: Illegal cross-thread operation 例外 2004年11月22日 14:33 宇宙仮面
下手にスレッドセーフにするとデッドロックではまりそうですね。作ったアプリを修正しながら、この例外とても気に入りました。個人的には、今回の機能アップお気に入りトップ10入り。:-)
でも、『2005に移植したら例外があがって動かない!』って悲鳴があちこちで上がりそうな・・・
# re: Illegal cross-thread operation 例外 2006年9月29日 1:13 Array
Array