c# 异步、重入、Async、Await
程序员文章站
2024-01-28 11:25:46
...
如果提示 Task不包含GetAwaiter的定义,请将项目的目标框架改到4.5及以上
using System;
using System.Windows.Forms;
using System.Threading.Tasks;
using System.Threading;
namespace async
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
button1.AutoSize = true;
}
private void button1_Click(object sender, EventArgs e)
{
if (!button1.Enabled) return;//防止重入,设置Enabled后事件未结束前仍然可能进入
button1.Enabled = false;
Does();//异步方法,未使用 await 不会阻塞,将继续执行下去
button1.Text = "读取中,请稍候…";
}
//线程的高级版本
private Task<string> DoWork()
{
return Task.Run(() => { Thread.Sleep(4000); return "读取完成!"; });
}
//此方法执行后不影响窗体的运行
private async void Does()
{
string text = await DoWork();//使用 await 调用Task,将等待返回结果
button1.Text = text;
button1.Enabled = true;
}
}
}
上一篇: python--进程初识详解
下一篇: 2. 解构赋值