程序等待事件在c#中发生

时间:2013-04-11 16:53:05

标签: c#

我想要我的程序的这一部分(我在代码中用“//”符号显示),等到按钮3被点击恢复。

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

2 个答案:

答案 0 :(得分: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;
 }

答案 1 :(得分: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;
}

使用它和C#5.0中的await,我们可以创建与您请求的内容类似的代码,即使它产生的代码与其他答案类似(因此保持异步并且不阻止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);
    }
}