请教高手C#中BackGroundWorker的详细使用方法以及如何正确高效访问父窗体UI方法

huating008 2009-04-07 07:06:09
各位高手大哥大姐们,我是已在读的学生,最近自己筹划着写了个winform小程序,在编写一个和BackGroundWorker使用有关的代码段时出现了问题。我程序设计的总体思路是:在一个子窗体载入事件Page_Load中调用backGroundWorker1.RunAysnc()启动BackGroundWorker,之后及启动的代码如下:
private void FrmPrintBalance_Load(object sender, EventArgs e)
{
Cursor.Current = System.Windows.Forms.Cursors.AppStarting;
FrmMain parentFrm = (FrmMain)this.MdiParent;
parentFrm.timer1.Stop();
parentFrm.toolstateDate.Text = "收支汇总报表正在载入中...";
parentFrm.toolStripProgressBar2.Visible = true;
if (!backgroundWorker1.IsBusy)
{
backgroundWorker1.RunWorkerAsync(); //启动BackGroundWorker
}
}

private delegate void DoWorkCallBack();
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
Thread myTread = new Thread(new ThreadStart(StartDoWork));
myTread.Start();

}
private void StartDoWork() //若要操作UI,只有DoWork中需要借助Invoke,其他两个不用
{
if (this.InvokeRequired)
{
DoWorkCallBack dwc = new DoWorkCallBack(StartDoWork);
this.Invoke(dwc);
}
else
{
this.tb_FamilyBalanceTableAdapter1.Fill(this.financialMISDataSet_tb_FamilyBalance1.tb_FamilyBalance);
CrystalReportFamilyBalance1.SetDataSource(this.financialMISDataSet_tb_FamilyBalance1); //给水晶报表填充数据
}
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
FrmMain parentForm = (FrmMain)this.MdiParent;
parentForm.toolStripProgressBar2.Value = e.ProgressPercentage;

}

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
FrmMain parentForm = (FrmMain)this.MdiParent;
parentForm.toolstateDate.Text = "收支汇总报表载入完成";
parentForm.toolStripProgressBar2.Visible = false;
parentForm.timer1.Start();
}

可是不知什么原因,调试时总是在“this.Invoke(dwc)"处报“未将对像实例化”,另外觉得好像缺个启动backgroundWorker1_ProgressChanged()的ReportProgress()调用。

这个应用的确有点麻烦和复杂,涉及到了BackGroundWorker和访问父窗体UI控件的综合应用。正是因为这样,才是它具有一定挑战性!烦请各位高手慷慨解囊,小弟在这里先谢谢了!
...全文
938 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
lddwww 2011-09-22
  • 打赏
  • 举报
回复
是缺少ReportProgress()调用

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧