【发布时间】:2011-04-01 00:36:33
【问题描述】:
我正在使用 .net 2.0,并且我创建了一个表单 (System.Windows.Forms.Form) 用于在长时间运行的任务期间显示信息。
当我开始一个长时间运行的任务时,我创建了这个表单的一个新实例,调用 .Show() 并启动 BackgroundWorker。但是即使我使用 BackgroundWorker 来完成工作,表单确实会显示出来,但会立即阻塞并且在后台工作人员完成之前不会响应,i.d.出现了表单,但没有显示内容(gif 和文本框)?
奇怪的是,当 BackgroundWorker 的工作如此密集时,这不会发生!?!怎么会?
例子:
private void UpdateReportingTab()
{
//p is an instance variable; Progressbar is just a simple form control
//showing the passed message
p = new Progressbar("Loading Data...");
p.Show();
BackgroundWorker bw = new BackgroundWorker();
bw.WorkerSupportsCancellation = true;
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
bw.RunWorkerAsync();
}
private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
p.BeginInvoke(new MethodInvoker(p.Close));
}
private void bw_DoWork(object sender, DoWorkEventArgs e)
{
if (this.InvokeRequired)
{
this.BeginInvoke(new MethodInvoker(delegate()
{
//long running database queries, whose results update text fields
//while text fields are filled p show "no response"
TextEditItems.Text = Convert.ToString(itemsDao.getItemCount());
....
}
}
}
谢谢!
安迪
【问题讨论】:
标签: c# .net winforms user-interface backgroundworker