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;    

            }

       }

  • 相关阅读:
    mysql_fetch_array()和mysql_fetch_assoc()两个函数的区别
    在vmware workstation7上安装centos5.5的一些问题
    如何在CentOS下安装VMwareTools工具
    ResultSetMetaData类的介绍
    火狐快捷键
    ResultSetMetaData类的介绍
    jstl标签的使用
    e.printStackTrace()介绍
    mysql初学指南
    在SQL server中,怎么区别char跟varchar?
  • 原文地址:https://www.cnblogs.com/hnfxs/p/3222005.html
Copyright © 2011-2022 走看看