工作爲什麼這個工作:調度不是在非同步模式
Application.Current.Dispatcher.Invoke(() => Thread.Sleep(500));
但這不起作用?
Application.Current.Dispatcher.InvokeAsynch(() => Thread.Sleep(500));
一步一步地調試正確進入第一種方法,但不會進入第二種方法。 在調用InvokeAsynch
方法之前是否需要調整?
上下文是WPF
應用程序。
工作爲什麼這個工作:調度不是在非同步模式
Application.Current.Dispatcher.Invoke(() => Thread.Sleep(500));
但這不起作用?
Application.Current.Dispatcher.InvokeAsynch(() => Thread.Sleep(500));
一步一步地調試正確進入第一種方法,但不會進入第二種方法。 在調用InvokeAsynch
方法之前是否需要調整?
上下文是WPF
應用程序。
因爲it's你要等到它的異步方法返回:
await Application.Current.Dispatcher.InvokeAsync(() => Mymethod);
或者使用下面的語法,如果你不是在一個「異步語境」:
Application.Current.Dispatcher.InvokeAsync(() => Mymethod).ContinueWith(x => { DoSomething_here });
結果Dispatcher.InvokeAsync(...)
是DispatcherOperation。這幾乎是提交給Dispatcher隊列的任務的包裝器。 所以讓我相信你期待,你可以使用下面的代碼的行爲:
var dispatcherOperation = Application.Current.Dispatcher.InvokeAsync(() => Thread.Sleep(500));
dispatcherOperation.Wait();
,或者你可以await
這個對象,因爲它有TaskAwaiter GetAwaiter()
方法。
它似乎沒有辦法。 如果我運行: await Application.Current.Dispatcher.InvokeAsync(()=> Mymethod()); MyMethod代碼永遠不會運行,線程將無限期地等待。 –
我認爲你必須添加你的方法作爲引用,而不是像這樣調用它:'await Application.Current.Dispatcher.InvokeAsync((=> Mymethod);' – Hypnobrew