上で実行するためにTaskScheduler /のSynchronizationContextを取得します。このコードはUIスレッド上で実行され、UIスレッドで発生したスレッドに関係なくイベントを処理するために設計されています。すべての処理が行われてしまうところそれは、スレッド1のようになりますでしょうは、WPFのViewModelのために以下のコードを考えてみて特定のスレッド
ChangeManager init on thread=1
ModelChanged on thread=3
ModelChanged on thread=3
ModelChanged on thread=7
ModelChanged on thread=9
私の期待:これは出力を実行します
しかしは、のようなものです。私がこのようなSynchronizationContextを直接使用しようとしても、
protected void Init()
{
Debug.WriteLine(string.Format("ChangeManager init on thread={0}", Thread.CurrentThread.ManagedThreadId));
this.uiContext = SynchronizationContext.Current;
modelChanged = (o, args) => uiContext.Post((ignore) => {
Debug.WriteLine(string.Format("ModelChanged on thread={0}", Thread.CurrentThread.ManagedThreadId));
this.ModelChanged(o, args);
}
, null);
}
...同じことが分かります。
私の考え方やアプローチには何か問題はありますか?どのようにしてイベントをinitスレッドで処理するのですか?
ありがとうございます!