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;    

        }

   }