当C#编译器处理委托类型时,它先自动产生一个派生自System.MulticasrDelegate的密封类,该类定义了三个公共方法:Invoke(),BeginInvoke()和EndInvoke()。Invoke()用来以同步方式调用委托对象维护的方法,而BeginInvoke()和EndInvoke()方法能在第二个执上文在《C# 使用BackgroundWorker实现WinForm异步》介绍了如何通过BackgroundWorker实现winForm异步通信,下面介绍如何通过BackgroundWorker实现进度条显示。实现效果图如下所示:
要实现此功能,首先需要创建一个带有进度条的窗体,取名为:frmProcess,窗体中添加processBar和一个Label进行,设置这两个控件的Modifiers值为public。接下来在上文的代码基础上进行操作。
(1) 定义全局窗体变量
接着上文中的代码,在窗体Form1下定义变量:
1 frmProcess myProcess;
(2)Start按钮单击事件下对frmProcess窗体进行实例化。
1 myProcess = new frmProcess();
2 myProcess.StartPosition = FormStartPosition.CenterScreen;
3 myProcess.pbProcess.Value = 0;
4 myProcess.lblProcesstext.Text = "0%";
5 myProcess.Show();
6 myProcess.TopMost = true;
(3)backgroundWorker1_ProgressChanged事件下传入当前进度
1 myProcess.pbProcess.Value = e.ProgressPercentage;
2 myProcess.lblProcesstext.Text = e.ProgressPercentage + "%";
通过以上功能操作,就完成了进度条的显示。