Посмотрите на TaskScheduler.FromCurrentSynchronizationContext
. Инфраструктура задач обеспечивает очень гибкий способ настройки выполнения операций с привязкой к вычислениям, даже если приложение применяет конкретную модель потоков.
EDIT:
Хм, из того, что вы опубликовали, трудно получить более четкое представление. Я понимаю, что вы используете приложение с несколькими представлениями с отдельными диспетчерами для каждого представления, верно? Так как вся диспетчеризация сводится к получению SynchronizationContext
и Post
-ing к нему, вы можете получить правильные TaskScheduler
(тот, который с правильными SynchronizationContext
) в некоторый момент, когда ваши взгляды получили один. Простой способ сделать это - получить TaskScheduler во время конфигурирования тактов:
// somewhere on GUI thread you wish to invoke
// a long running operation which returns an Int32 and posts
// its result in a control accessible via this.Text
(new Task<Int32>(DoSomeAsyncOperationReturningInt32)
.ContinueWith(tTask => this.Text = tTask.Result.ToString(),
TaskScheduler.FromCurrentSynchronizationContext)).Start();
Не уверен, поможет ли это, если вы широко используете Задачи, вы, вероятно, уже это знаете ...