2009-09-01 81 views

答えて

14

指します。他のスレッドに作業項目をプッシュするには、Invoke(同期)またはBeginInvoke(非同期 - 理想的にはEndInvokeを後で呼び出します)のいずれかを使用します。同様に、InvokeRequiredを使用して「これを行う必要がありますか、自分で作業を実行できますか?」と尋ねます。

このインターフェイスの最も一般的な使用方法は、Windowsフォームであり、UIスレッドに作業をプッシュする方法の一部です。もちろん、Control.Invoke/Control.BeginInvokeを等しく使用することもできますが、フォームコントロールはこのインターフェイスを実装して抽象化を可能にしています。したがって、下流のコードはWindowsフォームに結びつける必要はありません。フォームの場合、InvokeRequiredは「私はUIスレッドですか?」という意味です。

実際には、私はそれを直接使用するのが一般的ではないと確信しています。 UIでイベントを処理し、最も適切なローカルメカニズムを使用してUIがスレッド切り替えを処理するようにするのが一般的です。

一般的な使用方法:(インタフェースを実装)objによって管理スレッドにSomeMethod(代理人を介して)実行

obj.Invoke((MethodInvoker) SomeMethod); 

+0

ありがとうmarcその素晴らしい答え.. –

+0

私は最近非常に簡単な 'IAsyncResult'実装を伴う' ISynchronizeInvoke'の非常に簡単な実装を見ました:http://gurkashi.blogspot.com/2011/01/hi-all- in-this-post-i-will-demonst.htmlを参照してください。こんにちは、私は疑問に思っていますが、今、.Net 4.5では、コールバックでBeginInvokeの古い学校のパターンの代わりにasync/awaitを使うことができます。このインターフェースは、私の4.5ツールボックスから実装することができる* BeginInvoke'、*と書かれています。 – IAbstract

2

ISynchronizeInvoke Interface

ISynchronizeInvokeインターフェイス は、イベントの発生 約オブジェクト間の同期および非同期 通信を提供します。このインターフェイスを実装するオブジェクト は、 というイベントが発生したという通知を に送信し、そのイベントに関する のクエリに応答できます。このようにして、 クライアントは、 の1つの要求が処理されてから、最初に の完了に依存する後続の要求を に送信することができます。

もこれは基本的にスレッド間で作業をプッシュする方法が記載されて

http://blogs.msdn.com/jaredpar/archive/2008/01/07/isynchronizeinvoke-now.aspx

+0

これは、下位層ロジックのバックグラウンドスレッドを使用してメインスレッドのUIを更新するために使用できると思いますか? –

関連する問題