C#委托的回调机制

来源:互联网 发布:直流电源品牌 知乎 编辑:程序博客网 时间:2024/05/05 11:07

代码如下:

    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;        }    }



0 0
原创粉丝点击