情報科学屋さんを目指す人のメモ(FC2ブログ版)

何かのやり方や、問題の解決方法をどんどんメモするブログ。そんな大学院生の活動「キャッシュ」に誰かがヒットしてくれることを祈って。

ブログ内検索

スポンサーサイト このエントリーを含むはてなブックマーク

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサー広告 | 編集
このエントリーをはてなブックマークに追加 Clip to Evernote

Control.BeginInvokeとControl.Invoke(System.Windows.Forms)メモ このエントリーを含むはてなブックマーク

GUIアプリを.NETで作成するとき、GUIを操作するのは常にメインスレッドであって、サブスレッドから操作してはいけないというのが鉄則なんですが、そのときに便利なBeginInvokeとInvoke。ちょっとmsdnライブラリで見てみたら、

BeginInvoke
コントロールの基になるハンドルが作成されたスレッド上で、指定したデリゲートを非同期的に実行します。

Invoke
コントロールの基になるウィンドウ ハンドルを所有するスレッド上で、デリゲートを実行します。

と、なっていました。msdnを見てちょっとスッキリ。

ちなみに、「作成」と「所有」になにか違いはあるのだろうかと思って、英語(en-us)で見てみると、

BeginInvoke
Executes a delegate asynchronously on the thread that the control's underlying handle was created on.

Invoke
Executes a delegate on the thread that owns the control's underlying window handle.

となっていて、やっぱりちょっと違います。とりあえず、同期と非同期の違いだと思っておけばいいんですかね。

それにしても、GUIをきれいに構成する方法が知りたい。複雑になると拡張性を無視したコードになっちゃう。うーん、まぁ、やってるうちに少しずつよくなればいいのかな。

.NET | コメント:0 | トラックバック:0 | 編集
このエントリーをはてなブックマークに追加 Clip to Evernote

この記事のコメント

コメントの投稿 エントリの新旧に関わらず、極力18時間中に返信します。














この記事のトラックバック

トラックバックURL:
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。