WPF 使用async await 执行异步操作

76 篇文章 1 订阅

演示如何使用async 和await 关键字实现异步操作,不阻塞UI。

在UI创建一个Button事件和一个Label实现信息的呈现。

XAML码如下:

<Button x:Name=“btnProcessFile”  Margin=“5”

Click=“btnProcessFile_Click”

HorizontalAlignment=“Center” Width=“120” VerticalAlignment=“Center” >

Process files

后台代码:

using System.IO;

using System.Threading;

该函数模拟实现耗时的操作

private int countCharacters()

{

int count = 0;

using(StreamReader reader= new StreamReader(“data.txt”))

{

string content = reader.ReadToEnd();

count = content.Length;

Thread.Sleep(3000); // 等待3秒模拟耗时

}

return count;

}

不使用异步方法:

private void btnProcessFile_Click(object sender, RoutedEventArgs e)

{

lblMsg.Content = “Processing File,Please wait…”;

int count = countCharacters();

lblMsg.Content = count.ToString() + " Characters in file";

}

此时UI会阻塞,在执行的3秒中,UI是阻塞的,无法拖动UI的。

使用异步方法,UI不会再阻塞的,可以再执行计算函数,UI不再阻塞,可以拖动UI。

private async void btnProcessFile_Click(object sender, RoutedEventArgs e)

{

Task task = new Task(countCharacters);

task.Start();

lblMsg.Content = “Processing File,Please wait…”;

int count = await task;//Not Block UI

lblMsg.Content = count.ToString() + " Characters in file";

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

flysh05

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值