当我们在事件里面进行大量的循环操作时,windows将等待循环结束。此时界面是得不到响应的。为了在WinForm界面上实时地显示每次循环得到的结果,可以用.net提供的Application.DoEvents();
我们定义一个TextBox(ID为txtMessage),一个Button(ID为txtTest)
private void btnTest_Click(object sender, EventArgs e)
{
for (int i = 0; i < 10000; i++)
{
this.txtMessage.Text = i.ToString();
}
}
以上代码的运行结果:消息框内只显示9999,并且有较长的等待时间;
为了实时显示1--9999,我们做了如下处理
private void btnTest_Click(object sender, EventArgs e)
{
for (int i = 0; i < 10000; i++)
{
this.txtMessage.Text = i.ToString();
Application.DoEvents();//实时响应对消息框的处理
}
}
和BackgroundWorker的应用:
................
BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
bw.RunWorkerAsync();
while (bw.IsBusy)
...{
Application.DoEvents();
Thread.Sleep(10);
}
}
void bw_RunWorkerCompleted( object sender, RunWorkerCompletedEventArgs e)
... {
telnet.Close();
customProgressBar1.Marquee = false;
customProgressBar1.Visible = false;
}
void bw_DoWork( object sender, DoWorkEventArgs e)
... {
.........
}