private void button1_Click(object sender, EventArgs e)
{
Thread thread1 = new Thread(new ThreadStart(look));
thread1.Start();
}
         public   void look()
{ textBox1.Text += "i";
}
----------------------------------------------------------------------
运行成功了,但是在按下button1的时候却提示:线程间操作无效,然后就只有强行退出了...这个问题该怎么解决啊?
我是刚学了1小时的C#新手.....

解决方案 »

  1.   

    需要写个委托
    delegate void GetString(string i);
    private void AddString(string i)
    {
     if(this.textBox1.InvokeRequired)
       GetString d = new GetString(AddString);
       this.Invoke(d,new object[]{i});
     else 
       this.textBox1.Text += i;
    }
      public   void look()
    {    AddString(i);
    }
    即可
      

  2.   

    vs2005出于安全考虑,不容许这样的操作,即线程间相互调用.
    这样改一下即可://定义一个代理
            public delegate void MyInvoke(string str);
            //更新界面的方法
            private void UpdateTextBox(string str)
            {
                textBox1.Text +=str;
            }
            //线程回调函数
            public void look()
            {
                MyInvoke mi = new MyInvoke(UpdateTextBox);
                this.BeginInvoke(mi, new object[] { "i" });
            }我测试过,楼主不妨试一试...
      

  3.   

    其实还有一个更加简单的方法可以解决这个问题,即在构造函数中加上这样一句话即可:
    CheckForIllegalCrossThreadCalls = false;
    加上这句话后,线程的处理就同vs2003完全一样了,即允许线程间相互调用,但是建议为安全性考虑,还是不要这样做为妙...
      

  4.   

    2楼和4楼的方法都可以
    但是我到现在还没看明白这段代码到底是怎么回事...
    在某处看到delegate=委托=函数指针=引用,引用也可以像public delegate void MyInvoke(string str);这么用啊........
      

  5.   

    这个要慢慢理解,我以前也是拿VC++/MFC做开发的,刚接触C#委托时,也很郁闷.建议楼主先找些相关的文章看一下吧....