Как переключить задачу на диспетчер WPF с приоритетом?C#

Место общения программистов C#
Ответить
Anonymous
 Как переключить задачу на диспетчер WPF с приоритетом?

Сообщение Anonymous »

WPF Dispatcher имеет метод InvokeAsync, который принимает Action или Func и DispatcherPriority.
Мне нужно передать Func и мне нужно запустить всю задачу в диспетчере WPF с заданным приоритетом.
Пример:< /strong>
Мне нужно вызвать асинхронную функцию Foo, которая должна работать в потоке диспетчера:

Код: Выделить всё

async Task Foo()
{
// some view model modification that needs to run on UI thread
...

// calling some IO call on thread pool
await Task.Run(() => SomeIoCallAsync());

// more view model modifications
...

// calling something on thread pool
await Task.Run(() => HeavyComputation());

// more view model modifications
...

return someResult;
}
из панели асинхронных функций, которая не выполняется в потоке пользовательского интерфейса:

Код: Выделить всё

async Task Bar()
{
...

TODO call Foo() on UI thread

...

}
Примечание. Если бы Foo была бы не асинхронной функцией, а просто синхронной, Bar могла бы выглядеть так:

Код: Выделить всё

async Task Bar()
{
...

await dispatcher.InvokeAsync(Foo, someDispatcherPriority);

...

}
Как я могу вызвать асинхронную функцию в потоке диспетчера с некоторым приоритетом?


Подробнее здесь: https://stackoverflow.com/questions/793 ... a-priority
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»