2011-07-23 4 views
2

カスタムワーカーコンポーネントを記述し、そのコンポーネントをGUIスレッドで起動させたいとします。しかし、私は既存のウィンドウについて知りたくありません。また、時にはウィンドウが全くない(ログインとメインウィンドウの間の遷移)時があります。だから私はWindow.Dispatcher.BeginInvoke()を使うことはできません。他の方法は何ですか? MSDN MagazineのWPFのスレッドセクションの関数をGUIスレッドにディスパッチする方法は?

+0

[observer pattern](http://en.wikipedia.org/wiki/Observer_pattern)を参照してください。 –

+0

別のGUI要素の使用はどうですか?例:myButton.invoke? –

答えて

2

パス(またはCurrentを使用して取得)あなたの労働者へのSynchronizationContext。これは、特定の実行コンテキスト(通常はスレッド)を表す下位レベルのスレッドオブジェクトで、Postメソッドを使用してカスタムアクションをポストすることができます。 WPFアプリケーションの場合、SynchronizationContext.PostDispatcher.BeginInvokeを使用します。特定の実装に縛られることなく、イベントを呼び出すか、特定のコンテキストにメッセージを送信するバックグラウンドコンポーネントを記述するのは良い方法です。

Plusは、それが簡単にユニットが任意の非同期の複雑さを追加することなく、あなたのコンポーネントをテストするために、すべてのスレッドを使用しない同期SynchronizationContextを書くことは非常に簡単です。

2

グレート記事:Build More Responsive Apps With The Dispatcher

内容: - WPF でスレッディング - を扱う非UIスレッド - - ディスパッチャ を使用してタイマーに

を使用して(申し訳ありませんができません完全に自分の携帯電話のブラウザからフォーマットリスト)

関連する問題