2016-04-15 1 views
0

Почему эта работа:грузоотправитель не работает в режиме асинхронная

Application.Current.Dispatcher.Invoke(() => Thread.Sleep(500)); 

, но это не работает?

Application.Current.Dispatcher.InvokeAsynch(() => Thread.Sleep(500)); 

Пошаговая отладка правильно вводит первый метод, как ожидалось, но никогда не входит во второй. Есть ли что-то, что необходимо перед вызовом метода InvokeAsynch?

Контекст - это приложение WPF.

ответ

0

Поскольку подмигнули метод асинхронной вы должны ждать его, чтобы вернуться:

await Application.Current.Dispatcher.InvokeAsync(() => Mymethod); 

Или использовать синтаксис ниже, если вы не в «контексте асинхронной»:

Application.Current.Dispatcher.InvokeAsync(() => Mymethod).ContinueWith(x => { DoSomething_here }); 
+0

Это не похоже на трюк. Если я запустил: ждет Application.Current.Dispatcher.InvokeAsync (() => Mymethod()); Код MyMethod никогда не запускается, и поток ждет бесконечно. –

+0

Я думаю, вы должны добавить свой метод в качестве ссылки, а не вызывать его как: 'wait Application.Current.Dispatcher.InvokeAsync (() => Mymethod);' – Hypnobrew

0

Результат от Dispatcher.InvokeAsync(...) - DispatcherOperation. Это довольно обертка вокруг задачи, которая была отправлена ​​в очередь диспетчера. Таким образом, чтобы получить поведение я считаю, что вы ожидаете вы можете использовать следующий код:

var dispatcherOperation = Application.Current.Dispatcher.InvokeAsync(() => Thread.Sleep(500)); 
dispatcherOperation.Wait(); 

или вы можете await этот объект, как это имеет TaskAwaiter GetAwaiter() метод.

Смежные вопросы