Loading

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




 

posted @ 2016-01-06 10:56  myEsn2E9  阅读(194)  评论(0编辑  收藏  举报