1

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

编辑

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

4

3 回答 3

3

使用计时器类

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 属性大于零,就会根据 Interval 属性设置每隔一段时间引发 Tick 事件。

于 2012-11-27T06:30:49.280 回答
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 变为启用并处理事件等。

于 2012-11-27T06:23:33.867 回答
0

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

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

于 2012-11-27T06:47:55.517 回答