以前做过一个子窗体操作父窗体中控件的例子,就是在子窗体实例化的时候把父窗体中的空间当成子窗体构造函数的参数传过去即可。我想把这个思路用在线程控制控件显示的例子上(当然用委托可以办到)。大体思路是这样的:    声明一个类clsWriteLabel封装要做的事情
//变量
public string num
//构造函数
public clsWriteLabel(ref string _num)
{
  this.num = _num;
}
//方法
 public void WriteLabe()
{
    for (int i = 100; i < 10000; i++)
    {
       num = i.ToString();                
    }
}    主窗体
//声明私有变量(用静态变量也试过)
private string num;
//方法
 private void StartThreads()
{
   //实例化类
   clsWriteLabel clsWriteLabel = new clsWriteLabel(ref this.num);
   //开始线程
   Thread Thread = new Thread(new ThreadStart(clsWriteLabel.WriteLabe));
   Thread.Start();
   //扫面num的值在窗体控件上显示
   while (!StopListeningFlag)
   {
       // 等待用户按下停止按钮。
       this.label1.Text = num;
       // 在等待过程中,让系统处理其他事件。       
       System.Windows.Forms.Application.DoEvents();
   }
   //终止线程
   Thread.Interrupt();
}
以上是主要代码段。我测试的过程中在窗体上num的值一直都是NULL,但是线程里面的num已经赋值了,这个值怎么传不过来?

解决方案 »

  1.   

    这样的思路我感觉有点问题,void WriteLabe是void类型的,当然没有东西传过来了。(个人认为)
      

  2.   

     不是由于线程的原因,以下测试代码  
       private string sHello;
        private void button1_click(object sender, EventArgs e)
    {        
                string hello = "test";
                AssignString(ref hello);            hello = "tttttt";
                System.Diagnostics.Debug.WriteLine(sHello);//"还是显示test
    }
            private void AssignString(ref string tt)
            {
                sHello = tt;
            }
      

  3.   

    Thread Thread = new Thread(new ThreadStart(clsWriteLabel.WriteLabe)); 
      Thread.Start(); 
    并没有把参数传给子线程感觉在主线程中实例话的那个clsWriteLabel和子线程一点关系也没有