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

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

时间:2024-08-24 10:28:19浏览次数:3  
标签:Task await Current Application Func InvokeAsync 等待 Dispatcher

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

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

 

 执行的结果:

 

标签:Task,await,Current,Application,Func,InvokeAsync,等待,Dispatcher
From: https://www.cnblogs.com/wuty/p/18377474

相关文章

  • Datawhale X 李宏毅苹果书 AI夏令营 -《深度学习详解》Task1
    深度学习基础学习目标理解深度学习的常见概念。掌握优化神经网络的方法。找到优化神经网络失败的原因。学习调整学习率(lr)的高级方法。1、局部极小值与鞍点在局部极小值与鞍点之前,首先了解一个特殊的点-临界点。1.1临界点通常将梯度为零的点统称为“临界点”。什么时......
  • Spring Boot集成Spring Cloud Task进行批处理任务管理
    SpringBoot集成SpringCloudTask进行批处理任务管理大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在微服务架构中,批处理任务是常见的需求,用于执行定时或周期性的工作。SpringCloudTask为SpringBoot应用提供了批处理任务管理的能力,支持任务的创......
  • C# start thread include Thread,Task,Async/Await,BackgroundWorker,ThreadPool,Time
    usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Linq;usingSystem.Text;usingSystem.Threading;usingSystem.Threading.Tasks;usingSystem.Windows;usingSystem.Windows.Controls;usingSystem.Windows.Data;using......
  • 多模态学习之论文阅读:《Pre-gating and Contextual Attention Gate — A new fusion m
    《Pre-gatingandContextualAttentionGate—Anewfusionmethodformulti-modaldatatasks》 -2024.11 影响因子7.9  (一)要点提出一种新的多模态数据融合方法,即PCAG(Pre-gatingandContextualAttentionGate),以解决现有跨模态交互学习中的噪声问题和不确定性问......
  • C# asnyc和await
    asnyc和await是什么?异步编程是一种编程范式,C#中的异步编程可以通过Thread,TheadPool,Task,async/await等来实现。await能等待什么?不能等待同步代码,只能等待Task或异步方法,且异步方法必须有返回值,async/await的出现:C#5(.NET4.5)引入的语法糖C#7.1,Main入口也可以C#8.0,可......
  • .NETCore 中的 await 原理浅析
    在.NETCore中,await 关键字是异步编程的重要组成部分,它极大地简化了异步代码的编写和维护。下面将对 await 的原理进行浅析:目录一、异步编程的背景二、await关键字的作用三、await的工作原理四、注意事项一、异步编程的背景随着网络应用的普及和硬件性能的不断提......
  • async await 状态机理解
    publicasyncTask<string>Wait3S(){awaitTask.Delay(3000);Console.WriteLine("Wait3S");return"";}#region异步任务-状态机#iftrueTestClasstestClass=newTestClass();//调用testClass的Wait3S方法执行varWait3S=t......
  • vSphere5.11.3.管理特性.1.Scheduled Task
    vcenterserversupportsquitealistoftasksyoucanscheduletorunautomatically:1.changethepowerstateofavm.(修改虚拟机电源状态)2.cloneavm.(克隆虚拟机)3.deployavmfromatemplate.(从一个模板部署虚拟机)4.moveavmwithvmotion.(使用vmotion技......
  • C# Task与Action和Func
    在C#中,Task是用于表示异步操作的类型。Action和Func<>是用于定义无返回值的方法和有返回值的方法委托。1.使用Action委托Action委托是无返回值的,你可以使用它来异步执行一个方法。Actionaction=()=>MethodWithNoReturnValue();Task.Run(action);2.使用Func<>委托Func......
  • C# Task
    Task 是C#中用于异步编程的一个核心组件,它表示一个异步操作的最终完成。Task 可以返回一个结果或者不返回任何结果(Task 类型),并且可以与其他 Task 对象组合和等待它们的完成。创建Task:Task.Run(()=>{//异步执行的代码});等待Task完成:awaitTask.Run(()=>{//异步执行......