• c#线程间操作UI-Invoke和BeginInvoke


    利用Invoke和或BeginInvoke实现线程间操作UI的简单例子。

     1  /*
     2          窗体包含一个button和一个richtextbox控件
     3          * 注:必须在子线程中执行Invoke和或BeginInvoke
     4          */
     5         /// <summary>
     6         /// 线程委托
     7         /// </summary>
     8         public delegate void g_Delegate1();
     9         /// <summary>
    10         /// 线程调用BeginInvoke修改UI委托
    11         /// </summary>
    12         public delegate void g_Delegate2();
    13         /// <summary>
    14         /// 线程函数
    15         /// </summary>
    16         public void UpdateTxt1()
    17         {
    18             g_Delegate2 pD2 = new g_Delegate2(UpdateTxt2);//在新的线程中建立委托,指向UpdateTxt2函数
    19             while (true)
    20             {
    21                 this.Invoke(pD2);//子线程执行委托pd2即函数UpdateTxt2,达到线程间操作UI的目的
    22                 //this.BeginInvoke(pD2);
    23                 Thread.Sleep(1000);
    24             }
    25         }
    26         /// <summary>
    27         /// 修改UI函数
    28         /// </summary>
    29         public void UpdateTxt2()
    30         {
    31             Random pRandom = new Random();
    32             int r = pRandom.Next(255);
    33             int g = pRandom.Next(255);
    34             int b = pRandom.Next(255);
    35             richTextBox1.Text=(string.Format("颜色组合:
    红:{0}
    绿:{1}
    蓝:{2}
    ", r, g, b));
    36             this.BackColor = Color.FromArgb(r, g, b);
    37         }
    38         /// <summary>
    39         /// 按钮事件
    40         /// </summary>
    41         /// <param name="sender"></param>
    42         /// <param name="e"></param>
    43         private void button1_Click(object sender, EventArgs e)
    44         {
    45             g_Delegate1 pD1 = new g_Delegate1(UpdateTxt1);//线程委托,指向UpdateTxt1
    46             Thread pThread = new Thread(new ThreadStart(pD1));//新建线程,指向委托pD1即函数UpdateTxt1
    47             pThread.Start();//开始新线程
    48         }

    效果图如下:

  • 相关阅读:
    VBS操作Excel常见方法
    判断文件和文件夹是否存在
    vbs获取自身文件名,不带格式,不带路径
    vbs,修改文件名
    UiPath字符串函数的介绍和使用
    linux各个目录的作用
    Linux下设置memcached访问IP
    python单继承与多继承
    粘包,文件传输
    网络编程
  • 原文地址:https://www.cnblogs.com/dullfish/p/6092432.html
Copyright © 2020-2023  润新知