目录
一、使用异步的目的
使用异步的目的通常是为了保证UI能够流畅的运行。
二、使用异步的核心
I/O等待型: 使用await关键字等待async方法返回的Task 或者Task<T>;
CPU处理型: 在async方法中,await等待一个使用Task.Run 方法在后台线程启动的操作。
三、为什么不直接使用Task任务或者Thread线程?
在没有与UI联动的情况下,可以根据实际需求直接使用Task或者一个Thread线程。但是,当一个需要更新UI的耗时的耗时操作执行时:
1. 使用主线程执行耗时操作,这毫无疑问会阻塞UI线程;
2. 使用Task执行耗时操作,会新开一个后台线程,操作过程在后台线程运行。但是需要更新UI值得时候,会转到UI线程中,还是会占用UI线程。
3. 使用异步方法执行耗时操作,会新开一个后台线程,操作过程在后台线程运行。如果需要更新UI,在此等待async方法返回的Task<T>的值作为UI的新值。在等待的过程中UI为空闲状态。等待结束后,在等待处继续执行后续操作。
四、使用UI线程执行耗时操作示例
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace UITool
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainModel model=new MainModel();
public MainWindow()
{
InitializeComponent();
this.DataContext = model;
}
private void Button