调度程序不在异步模式下工作

时间:2016-04-15 08:37:39

标签: c# wpf dispatcher

为什么这样做:

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

但这不起作用?

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

逐步调试正确地按预期输入第一个方法但从不进入第二个方法。 在调用InvokeAsynch方法之前是否需要使用anthing?

上下文是WPF应用程序。

2 个答案:

答案 0 :(得分:0)

因为它是异步方法,所以必须等待它返回:

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

如果您不在“异步上下文”中,请使用以下语法:

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

答案 1 :(得分:0)

Dispatcher.InvokeAsync(...)的结果是DispatcherOperation。它几乎是提交给Dispatcher队列的Task的包装器。 因此,为了获得我相信您期望的行为,您可以使用以下代码:

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

或者你可以await这个对象,因为它有TaskAwaiter GetAwaiter()方法。