c#2.0中,一个线程是不能访问另一个线程创建的控件的。这个问题的解决有。
1、  设置 System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

2、  使用委托的方式访问控件。

A、首先声明一个委托。参数是要和控件需要的参数一致。
B、然后设计这个委托需要处理的方法。参数和委托的一致。在方法中去处理这个参数,访问另一线程中控件。

C、在本线程中当要访问另一线程创建的控件的时候,就可以先判断是否该控件需要安全访问。

appendstringdelete

if (textBox5.InvokeRequired)

            {

                appendstringdelete d = new appendstringdelete(kk);

                textBox5.Invoke(d, " 这样就可以用了" );

                //textBox5.AppendText("nihao");

            }

            else

            {

textBox5.AppendText("nihao");

}

Private void kk string text
{

textBox5.AppendText(text);

}

这样就能达到目的了。

3、  使用另一种机制,backgroundWorker控件,来进行访问。

实际上是一个控件;引入方法是从工具栏中引入。

主要有三个事件。要进行注册。

 worker.DoWork += new DoWorkEventHandler(worker_DoWork);//执行任务

  worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);//任务结束时

worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged)//报告状态

以下是方法

. WorkerReportsProgress:是否可以向外报告进度。

   .WorkerSupportsCancellation :是否可以暂停任务

   . CancellationPending 是否正在暂停中

   . RunWorkerAsync() 开始执行任务。触发DoWork事件

   . ReportProgress(int percentPrgress,object userState) 向外报告进度。触发ProgressChanged事件.其中,参数可以在ProgressChangedEventArgsworker_ProgressChanged(object sender, ProgressChangedEventArgs e))中得到

   . CancelAsync() :取消(暂停)执行。

我们可以使用这个控件的. RunWorkerAsync()方法开始执行事件一中的任务。

如果在事件一种没有东西执行,实际上就是执行完毕,就会执行事件二。

如果我们在事件一中响应的执行了ReportProgress这个方法。那么就会触发事件三。

当然也可以在其它过程中触发ReportProgress这个方法。有个前提是必须能向外报告进度。

但是不知道到底怎么报告这个进度,没有现成的东西学习。但是可以解决上边的问题了。

就是去执行上边的东西。

留个尾巴。

综上所述就是有三种方法来解决上边的问题了。