2011-09-26 10 views
7

Dispatcher.BeginInvoke()はUIスレッドでコードを実行するために使用されています。最近、 'Deployment'クラスを使用してDispatcherインスタンスを取得するもう1つの方法です。私はthis.Dispatcher.BeginInvoke()Deployment.Current.Dispatcher.BeginInvoke()機能?、とSilverlightのthis.Dispatcher.BeginInvoke()とDeployment.Current.Dispatcher.BeginInvoke()メソッドの違い

私が使用する必要があるのinvokation間の任意のdiffrenceはあり

を知りたいのですがthis.Dispatcher.BeginInvoke()Deployment.Current.Dispatcher.BeginInvoke()

おかげ アレックス

答えて

11

短い答え:彼らは、Silverlightで同じなので、(利用可能な場合、コードのコンテキストで)短いものを使用します。

this.Dispatcher.BeginInvoke()問題のコントロールが実行されているスレッドで確実に実行されます。

Deployment.Current.Dispatcher.BeginInvoke()がメインUIスレッドで確実に実行されます。

2つは常にSilverlightで同じです(余分なUIスレッドを作成していない限り、通常はWPFでも同じです)。

現在のコンテキストにディスパッチャがない場合を除いて、this.Dispatcher.BeginInvoke()を使用し、代わりにグローバルなコンテキストを使用します。

+0

どのような状況で同じではないのですか? – AnthonyWJones

+0

@AnthonyWJones:Dispatcher.Currentは、コードを実行しているスレッドに関連付けられているディスパッチオブジェクトを取得します。したがって、異なるスレッドで呼び出されたときに同じではありません。 – Will

+0

@Will:Deployment.CurrentまたはDispatcher.Currentを意味しましたか? – wizzardz

関連する問題