WPF 的 await Application.Current.Dispatcher.InvokeAsync,Func 如果是Task , 等待賦值可能存在沒有等待執行完成的問題

wuty007發表於2024-08-24

最近在檢查我們組內的程式碼,發現好多用到

await Application.Current.Dispatcher.InvokeAsync 

相信好多WPF的開發都會用到 該方法做UI執行緒切換。但是細看裡邊的執行,發現了個別存在存在沒有等待完成的情況

執行的結果是 i 為 null 值。

這也就說明了 執行了

await Application.Current.Dispatcher.InvokeAsync

,其實還沒有完成等待完成,AI提示返回的是 DispatcherOperation<Task> 的 返回結果

反編譯導航進去

對於執行 Func<T> callback 回撥的,返回的是DispacherOperation<Func<Task>>

也就是說,要正在執行完成該函式,需要在 await Task<T> ,才能 拿到TResult 的結果

所以,解決的方法如下:

await await Application.Current.Dispatcher.InvokeAsync(Func<Task>)

執行的結果:

相關文章