WPF 使用async await 执行异步操作

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

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


XAML码如下:

           

           

       


后台代码:

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";

        }

你可能感兴趣的:(WPF 使用async await 执行异步操作)