C# 异步UI

个人理解:

假设运算量很大的方法是complicated(),UI更新方法是ui();

1.  complicated(); ui();

前者会阻塞主线程,导致页面卡死,等卡死完后再出现UI更新

2.Task.Run(()=>complicated()); ui();

开了一个线程运行前者,后者在线程没结束的时候已经出现,没有意义

3.await Task.Run(()=>complicated()); ui();

等待前者异步完成后,再更新UI,此时页面也不会卡死

------------------------------------------------------------------------------------------------------

如果需要在运行前者的时候根据运行情况动态更新ui,可在complicated方法中加入更新页面ui的委托(使用以上第三种),然后在需要更新的地方使用this.BeginInvoker()方法,该方法只能在新建的线程里运行才有效果,官方解释为:在创建控件基础句柄的线程上异步执行指定的委托。

总的来说,大概代码就是

void complicated(){

        for(int i = 1;i<=99999999;i++){

         //逻辑代码

         Action a = new Action(()=>{   //ui更新  });

         this.BeginInvoker(a);

}

}

async method(){

await Task.Run(()=>complicated());

Console.write("end");

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值