zoukankan      html  css  js  c++  java
  • 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;
            }
        }




  • 相关阅读:
    php解析xml文件的方法
    while倒数阶乘的和
    菱形代码
    0929课堂随记
    0929作业
    0928练习作业
    HelloJava
    Java例题
    Hello World(本博客启程篇)
    vue 如何实现在函数中触发路由跳转
  • 原文地址:https://www.cnblogs.com/myesn/p/5601604.html
Copyright © 2011-2022 走看看