C#委托的回调机制
代码如下:
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; } }