C#は電気羊の夢を見るか?(引っ越し中)

dtiブログが閉鎖とのことでhttp://tanocs.blog.fc2.com/へ引っ越します。

別スレッドからフォームコントロールを呼ぶときの注意

label1.textに値を代入しようとしたら”CrossThreadMessagingException”なる例外がっ

たかだかラベルにテキスト送信するだけでなんで例外が出るのかと思いきや、
別スレッドからのフォームコントロールプロパティへのアクセスは.Net2.0からの仕様変更で
そうなったそうで。

よくよく使用箇所を見てみるとたしかにフォームオブジェクト外からのイベント呼び出しようで、別スレッドっぽい。

そこでぐぐーる大先生で検索してみると、スレッドセーフだとかコントロール スレッドだとか、
妙に小難しい単語が並んでいて、サンプル見てもデリゲートとか見慣れない方法が連なっていて、
初心者には厳しいんじゃないかと思う・・


んで、簡単な対処方法を以下にご紹介

this.Invoke( //このthisはform1なので、別オブジェクトからの場合は注意が必要
(MethodInvoker)delegate() {
label1.Text = "hoge";
}
);

これでかなり簡単に、かつソースの見た目もほぼそのままコーディング出来る。
これすらも面倒だと言う人は、例外そのものを発行しなくなるオプションがあるそうなので、
そっちを当たってみるといいかも。
このエントリーをはてなブックマークに追加
LINEで送る

コメント

INVOKE

INVOKEの使い方、わかりやすかったです。
ありがとうございました。

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://t01a.dtiblog.com/tb.php/115-37826006

-

管理人の承認後に表示されます

-

管理人の承認後に表示されます

« この手があった  | HOME |  結果。 »

PAGE TOP ▲

Appendix

■春条

■春条

生息地は愛知
車と甘い物が好きな31歳
特技は無限昼寝

MONOからSharpDXを使う
変態的な手法で、
.NET Frameworkを使わずに
ゲーム作りやってます。

Search

Calender

« | 2017-08 | »
S M T W T F S
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -

Twitter

Recent Entries

DTIブログポータルへ
このブログを通報
Report Abuse

利用規約