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




  • 相关阅读:
    java 基础语法 2
    hdu4570Multi-bit Trie
    poj1244Slots of Fun
    二维凸包模板
    花神的数论题(数位dp)
    poj1113Wall(凸包)
    poj1066Treasure Hunt(线段相交)
    poj1039Pipe(直线交点、叉积)
    hdu4588Count The Carries
    hdu2475Box(splay树形转线性)
  • 原文地址:https://www.cnblogs.com/myesn/p/5601604.html
Copyright © 2020-2023  润新知