宇宙仮面 Blog

C# Programming Blog

AILight Banner
AILight Blog

プロフィール

宇宙仮面 Blog

目次

Blog 利用状況

記事分類

過去の記事

タグ

Illegal cross-thread operation 例外

.NET Framework のコントロールはほとんど?スレッドセーフではないので、コントロールがコントロール以外のスレッドからアクセスするのは許されていないのだけど、VS.2002, 2003  ではスレッド外からアクセスしたとしても、フレームワークでノーチェックでした。でも.NET Framework 2.0 ではしっかり例外(InvalidOperationException:Illegal cross-thread operation)をあげてくれますね。

以前作ったプログラムをVS2005 でコンパイル&実行してみてわかりました。つまり非同期プログラミングをちゃんとしていなかったのがばれたというか、教えてくれる!

VS2003以前では、自分でチェックコードを書かないと正しく動作しているのかわからないけど、今度からは問題があればシステム側が捕まえてくれるので、それはそれで評価できる。

でも、コントロールをスレッドセーフに設計してもらいたいな。それでないと毎回非同期で組まないといけなくって、結構めんどくさい。

あがった例外はこんな感じ。

-----
InvalidOperationException
Illegal cross-thread operation: Control 'statusBar1' accessed from a thread other than the thread it was created on.\r\nStack trace where the illegal operation occurred was:
.....
コールスタック情報
.....

投稿日時 : 2004年11月17日 0:24


コメントを追加

#  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
タイトル
名前
URL
コメント