WPFでプロデューサーコンシューマーパターンを実装する際に、この例のようなObservableCollection
マーシャリング手法を使用して、アイテムがワーカースレッドで作成されているときに、コレクションのイベントがUIスレッドにディスパッチされるようにしました。
winrtでは、次のようにマーシャリングを使用する方法を確認できますDispatcher
。
public void AddItem<T>(ObservableCollection<T> oc, T item)
{
if (Dispatcher.CheckAccess())
{
oc.Add(item);
}
else
{
Dispatcher.Invoke(new Action(t => oc.Add(t)), DispatcherPriority.DataBind, item);
}
}
このように切り替えることができCoreDispatcher
ます:
public async void AddItem<T>(ObservableCollection<T> oc, T item)
{
if (Dispatcher.HasThreadAccess)
{
oc.Add(item);
}
else
{
Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { oc.Add(item); });
}
}
- それは適切な使用
CoreDispatcher
ですか? - winrtの基本的な同時生産者/消費者パターンに対してこれを行うためのより良い方法はありますか?
- UIからマーシャリングコード
Dispatcher
に渡す必要があるのと同じ静的アクセサーメソッドがない場合はどうなりますか?CoreDispatcher