0

我希望我的程序的这一部分(我在代码中通过“//”符号在行前显示)等到单击 button3 以恢复。

 private void button2_Click(object sender, EventArgs e)
 {
    if (this.textBox3.Text != "")
    {
       this.listView1.Items.Clear();
       //this.listView1.Items.Add(this.textBox3.text);
    }
 }
4

2 回答 2

1

好像你想要这样的东西:

 private void button2_Click(object sender, EventArgs e)
 {
    if (this.textBox3.Text != "")
    {
       this.listView1.Items.Clear();
       button3.Click += Function;
    }
 }
 private void Function(object sender, EventArgs e)
 {
     this.listView1.Items.Add(this.textBox3.text);
     button3.Click -= Function;
 }
于 2013-04-11T17:01:40.093 回答
1

所以我们将从这个帮助方法开始,它产生一个任务,当一个按钮被点击时完成:

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);
    }
}
于 2013-04-11T17:24:43.607 回答