WPF 的 await Application.Current.Dispatcher.InvokeAsync,Func 如果是Task , 等待赋值可能存在没有等待执行完成的问题

最近在检查我们组内的代码,发现好多用到

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>)

 

 执行的结果:

 

posted @ 2024-08-24 10:21  wuty007  阅读(43)  评论(0编辑  收藏  举报