所以我们将从这个帮助方法开始,它产生一个任务,当一个按钮被点击时完成:
public static Task WhenClicked(this Button button)
{
var tcs = new TaskCompletionSource<bool>();
EventHandler handler = null;
handler = (sender , args) =>
{
tcs.SetResult(true);
button.Click -= handler;
};
button.Click += handler;
return tcs.Task;
}
使用它以及await
从 C# 5.0 开始,我们可以创建读取方式与您请求的内容一样的代码,即使它生成的代码类似于其他答案的代码(从而保持异步并且不会阻塞 UI 线程)。
private async void button2_Click(object sender, EventArgs e)
{
if (this.textBox3.Text != "")
{
this.listView1.Items.Clear();
await button3.WhenClicked();
this.listView1.Items.Add(this.textBox3.text);
}
}