在C#编写的Windows窗体应用程序中单击一个按钮后,如何等待另一个按钮被单击?同时,我正在通过当前信息动态更新数据网格视图。
编辑
单击 button1 后,我想用当前信息重复更新 dataGridView,当单击 button2 时,我想停止更新 dataGridView。
使用计时器类。
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 事件。
所以你有按钮 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 变为启用并处理事件等。
使用 BackgroundWorker http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx
它不会冻结 UI,支持 ProgressBar,也可以是异步的。在链接中,您将看到一个具有您想要的相同功能的好示例(通过单击一个按钮启动某些任务并通过单击另一个按钮取消它)。