如何等待单击按钮?

时间:2012-11-27 06:10:06

标签: c# .net

在用C#编写的Windows窗体应用程序中单击按钮后,如何等待单击另一个按钮?同时我正在通过当前信息动态更新数据网格。

修改

单击button1后,我想用当前信息重复更新dataGridView,当点击button2时,我想停止更新dataGridView。

3 个答案:

答案 0 :(得分:3)

使用Timer Class

public partial class Form1 : Form
{
    System.Windows.Forms.Timer timer;

    public Form1()
    {
        InitializeComponent();

        //create it
        timer = new Timer(); 
        // set the interval, so it'll fire every 1 sec. (1000 ms)
        timer.Interval = 1000; 
        // bind an event handler
        timer.Tick += new EventHandler(timer_Tick); 

        //...
    }

    void timer_Tick(object sender, EventArgs e)
    {
        //do what you need
    }

    private void button1_Click(object sender, EventArgs e)
    {
        timer.Start(); //start the timer
        // switch buttons
        button1.Enabled = false;
        button2.Enabled = true;        
    }

    private void button2_Click(object sender, EventArgs e)
    {
        timer.Stop(); //stop the timer
        // switch buttons back
        button1.Enabled = true;
        button2.Enabled = false;
    }

来自MSDN:

  

Timer用于以用户定义的间隔引发事件。这个   Windows计时器专为UI的单线程环境而设计   线程用于执行处理。它需要用户代码   有一个UI消息泵可用,并始终使用相同的操作   线程,或将调用封送到另一个线程。

     

使用此计时器时,请使用Tick事件执行轮询   操作或显示指定时间段的闪屏   时间。每当Enabled属性设置为true和Interval时   property大于零,Tick事件每隔一段时间引发一次   基于Interval属性设置。

答案 1 :(得分:0)

所以你有按钮A和按钮B.当按下按钮A你想等待按下按钮B,然后做一些特别的事情?没有更多信息,最简单的方法是这样的:

private void OnButtonAClicked(object sender, EventArgs e)
{
    ButtonA.Enabled = false;
    ButtonA.Click -= OnButtonAClicked;
    ButtonB.Click += OnButtonBClicked;
    ButtonB.Enabled = true;
}

private void OnButtonBClicked(object sender, EventArgs e)
{
    ButtonB.Enabled = false;
    ButtonB.Click -= OnButtonBClicked;

    // Do something truly special here

    ButtonA.Click += OnButtonAClicked;
    ButtonA.Enabled = true;
}

此代码将切换(初始状态;按钮A启用,按钮B被禁用),按下按钮A,按钮B启用并处理事件等。

答案 2 :(得分:0)

使用BackgroundWorker http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx

它不会冻结UI,支持ProgressBar,也可以是异步。在链接中,您将看到一个具有相同功能的好示例(通过单击一个按钮启动某个任务,然后通过单击另一个按钮取消它)。