在用C#编写的Windows窗体应用程序中单击按钮后,如何等待单击另一个按钮?同时我正在通过当前信息动态更新数据网格。
修改
单击button1后,我想用当前信息重复更新dataGridView,当点击button2时,我想停止更新dataGridView。
答案 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,也可以是异步。在链接中,您将看到一个具有相同功能的好示例(通过单击一个按钮启动某个任务,然后通过单击另一个按钮取消它)。