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;    

            }

       }

  • 相关阅读:
    python面向对象的3个特点
    Redis-哈希槽
    PEP8 Python 编码规范
    每个人都要对自己进行5 项必要投资
    机器码和字节码
    python优缺点分析及python种类
    Zookeeper安装及运行
    Zookeeper简介与集群搭建
    Nginx Linux详细安装部署教程
    Nginx代理功能与负载均衡详解
  • 原文地址:https://www.cnblogs.com/hnfxs/p/3222005.html
Copyright © 2011-2022 走看看