WPF 使用async await 执行异步操作
演示如何使用async 和await 关键字实现异步操作,不阻塞UI。在UI创建一个Button事件和一个Label实现信息的呈现。XAML码如下:<StackPanel> <Button x:Name="btnProcessFile" Margin="5" &
演示如何使用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";
}
更多推荐
所有评论(0)