代码如下:
public partial class FrmMain : Form
{
// 定义回调使用关键字 delegate(回调是委托的一种应用,其本质就是委托)
private delegate void SetProgressBarValueCallBack(int value);
// 声明回调(一般回调多用在线程,因此多声明为类级变量)
private SetProgressBarValueCallBack setProgressBarValueCallBack;
public FrmMain()
{
InitializeComponent();
}
private void btnGo_Click(object sender, EventArgs e)
{
//初始化回调方法(实例化委托)
setProgressBarValueCallBack = new SetProgressBarValueCallBack(SetValueMethod);
// 必须先启动线程,再进行阻塞操作,否则将等待阻塞操作完成才会启动线程
// 创建并启动线程设置进度条2的值
Thread SetProgressBarValueThread = new Thread(SetProgressBar2Value);
SetProgressBarValueThread.Start();
for (int i = 0; i <= 100; i++)
{
Application.DoEvents();
Thread.Sleep(50);
pbProgressBar1.Value = i;
}
}
//设置进度条2值的线程
private void SetProgressBar2Value()
{
for (int i = 0; i <= 100;i++ )
{
Application.DoEvents();
Thread.Sleep(50);
// 触发操作对象的动作(本质就是将委托作为参数传递给控件的 Invoke 方法,此方法专门用于接受委托)
pbProgressBar2.Invoke(setProgressBarValueCallBack,i);
}
}
//设置进度条2被委托的方法
private void SetValueMethod(int value)
{
pbProgressBar2.Value = value;
}
}