本帖最后由 ooiikaka2 于 2011-10-30 20:53:20 编辑

解决方案 »

  1.   


            private void button1_Click(object sender, EventArgs e)
            {
                ThreadStart threadStart = new ThreadStart(Calculate);  //在次线程中改变textBox1的值
                Thread thread = new Thread(threadStart);
                thread.Start();
            }
            delegate void ChangText(double result);
            public void Calculate()
            {
                double Diameter = 0.5;
                double Result = Diameter * Math.PI;
                CalcFinished(Result);
                Thread.Sleep(2000);
                //this.BeginInvoke(new ChangText(CalcFinished), Result);
            }        public void CalcFinished(double Result)
            {
                if (this.InvokeRequired)
                {
                    this.BeginInvoke(new ChangText(CalcFinished), Result);
                }
                else
                {
                    textBox1.Text = Result.ToString();
                }
            }
      
    你照着改改看呢
      

  2.   

    思路
    在异线程中请求(委托)控件所在线程对控件进行操作
    控件所在线程的代码
    其中 rtb 是 RichTextBox
    //调用操作控件方法的委托(接受异线程请求的委托)
    public delegate void delegateUpdateRtb(string str);
    //操作控件的方法
    public void UpdateRtb(string str)
    {
    rtb.AppendText(str);
    rtb.AppendText("\n");
    }
    异线程中的代码
    //必须使用Invoke,请求控件所在线程的委托来调用相应方法操作控件
    rtb.Invoke(new delegateUpdateRtb(UpdateRtb) , new object[] { parm });