c#2.0中,一个线程是不能访问另一个线程创建的控件的。这个问题的解决有。
1、  设置System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
2、  使用委托的方式访问控件。
A、首先声明一个委托。参数是要和控件需要的参数一致。
B、然后设计这个委托需要处理的方法。参数和委托的一致。在方法中去处理这个参数,访问另一线程中控件。
C、在本线程中当要访问另一线程创建的控件的时候,就可以先判断是否该控件需要安全访问。
delegate void appendstringdelete(string text);
if (textBox5.InvokeRequired)
            {
                appendstringdelete d = new appendstringdelete(kk);
                textBox5.Invoke(d, "这样就可以用了");
                //textBox5.AppendText("nihao");
            }
            else
            {
textBox5.AppendText("nihao");
}
Private void kkstring 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这个方法。有个前提是必须能向外报告进度。
但是不知道到底怎么报告这个进度,没有现成的东西学习。但是可以解决上边的问题了。
就是去执行上边的东西。
留个尾巴。
综上所述就是有三种方法来解决上边的问题了。