0

起動時に別のスレッドで名前付きパイプサーバーを初期化するWPFアプリケーションがあります。
ある時点で、名前付きパイプクライアントはこのスレッドに情報を送信し、このスレッドはViewModelのObservableコレクションを更新する必要があります。
これを直接実行しようとすると、「ディスパッチャ以外のスレッドで今回のコレクションにアクセスできません」という例外が発生します(エラーを少し言い換えています)。
とにかく、名前付きパイプスレッドのハンドラーをUIスレッドに取得するにはどうすればよいですか。メソッドを呼び出すために使用できるディスパッチャオブジェクトがないようです。起動時に静的またはシングルトンなどにキャッシュすることになっていますか?
DispatcherSynchronizationContextは面白そうに見えますが、ビューで取得してビューモデルに保存する方法がわかりません。

4

1 に答える 1

0

現在のアプリケーションインスタンスのディスパッチャには、次の方法でいつでもアクセスできます。

var dispatcher = Application.Current.Dispatcher;

これを取得したらすぐに、InvokeまたはBeginInvokeによってUIスレッドでアクションを実行できます。

于 2012-11-05T11:36:38.297 に答える