zoukankan      html  css  js  c++  java
  • 委托在窗体中应用<4>

    1.Control的Invoke和BeginInvoke与委托的Invoke和BeginInvoke是2个概念,不能混淆
    2.Control的Invoke和BeginInvoke,他们的形参是delegate,委托的方法是在Control的线程上执行(即UI线程)
    以上第一点暂时没有看懂!
    直接上例子:
     public Form1()
            {
                InitializeComponent();
            }
            private delegate void ShowMessage();
            private Thread beginInvokeThread;
           // ShowMessage showMessage;
            private void button1_Click(object sender, EventArgs e)
            {
                this.richTextBox1.Text = "(1)进入按钮" + "
    ";
                button1.Invoke(new ShowMessage(ButtonMessage));
                this.richTextBox1.Text += "(3)已经点击" + "
    ";
    
                this.richTextBox2.Text = "(1)进入按钮" + "
    ";
                button1.BeginInvoke(new ShowMessage(ButtonMesage1));
                this.richTextBox2.Text += "(3)已经点击" + "
    ";
    
                this.richTextBox3.Text = "(1)进入按钮" + "
    ";
                beginInvokeThread = new Thread(new ThreadStart(ButtonMesage3));
                beginInvokeThread.Start();
                this.richTextBox3.Text += "(3)已经点击" + "
    ";
    
            }
    
            private void ButtonMessage()
            {
                this.richTextBox1.Invoke(new Action(() => { this.richTextBox1.Text += "(2)点击按钮" + "
    ";
                    this.button1.BackColor = Color.Green;
                    this.button1.Text = "已经点击"+"
    ";
                }));
            }
    
            private void ButtonMesage1()
            {
                this.BeginInvoke(new Action(() => { this.richTextBox2.Text += "(2)点击按钮" + "
    "; }));
            }
            private void ButtonMesage3()
            {
                    richTextBox3.Invoke(new Action(() => { this.richTextBox3.Text += "(2)已经点击" + "
    "; }));
                    richTextBox3.BeginInvoke(new ShowMessage(BeginInvokeMethod));
                    richTextBox3.Invoke(new Action(() => { this.richTextBox3.Text += "(4)已经点击" + "
    "; }));
            }
            private void BeginInvokeMethod()
            {
                this.richTextBox3.Text += "(5)已经点击" + "
    ";
            }

    运行结果:

    这个实例说明了invoke,begininvoke的区别,以及在跨线程修改控件属性的应用;

  • 相关阅读:
    MySQL 对于千万级的大表要怎么优化?
    随便写的一些docker使用操作命令
    零基础学python大概要多久?我用了30天
    普通人学python有意义吗?意义重大
    华为私有云组件
    Mysql 调优(二)分析思路
    MySQL 调优(一)调优原则
    shell脚本获取当前时间,分钟之前时间、小时之前时间和天之前时间
    java_windows环境变量自动设置脚本
    plsql中文乱码问题解决方案
  • 原文地址:https://www.cnblogs.com/xingyuanzier/p/13084662.html
Copyright © 2011-2022 走看看