为什么这样做:
Application.Current.Dispatcher.Invoke(() => Thread.Sleep(500) );
但这不起作用?
Application.Current.Dispatcher.InvokeAsynch(() => Thread.Sleep(500) );
逐步调试正确地按预期输入第一个方法但从不进入第二个方法。
在调用InvokeAsynch
方法之前是否需要使用anthing?
上下文是WPF
应用程序。
答案 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()
方法。