zoukankan      html  css  js  c++  java
  • C# 跨线程操作控件(简洁)

                                            C# 跨线程操作控件
    .net 原则上禁止跨线程访问控件,因为这样可能造成错误的发生。解决此问题的方法有两个:
    第一种方法是禁止编译器对跨线程访问作检查,可以实现访问,但是出不出错不敢保证。
    在form声明中加上Control.CheckForIllegalCrossThreadCalls = false;
    可以忽略控件得线程交叉引用错误
    如下:
    public Form1()
            {
                InitializeComponent();
                Control.CheckForIllegalCrossThreadCalls = false;
            }    

    第二种:推荐的解决方法是采用用委托,用委托方法来间接操作不是同一线程创建的控件。如下:

    //定义委托

    public delegate void MyInvoke(string str);

    //按钮事件 ,启动新线程

    private void button1_Click(object sender, EventArgs e)

       {

           Thread t = new Thread(new ThreadStart(fun));

           t.Start();

       }

       private void fun()

       {

          SetText("ddd");

        }

      private void SetText(string s)

        {

            if (textBox1.InvokeRequired)

              {

                 MyInvoke _myInvoke = new MyInvoke(SetText);

                  this.Invoke(_myInvoke, new object[] { s }); //数组参数一定是     object [] 型的

              }

           else       

           {

               this.textBox6.Text = s;    

            }

       }

  • 相关阅读:
    Ubuntu 18.04安装gcc、g++ 4.8
    Java 接口返回值集合防止空指针
    Linux CentOS7.9环境下搭建Java Web 环境
    Springboot集成UReport2
    linux 环境中 单独执行 python 脚本
    sql 注入的问题
    检验上传文件的大小
    Gunicorn使用讲解
    CentOS下安装部署对象存储服务MinIO
    阿里云CentOS7安装MySQL
  • 原文地址:https://www.cnblogs.com/hnfxs/p/3222005.html
Copyright © 2011-2022 走看看