delegate void MyIntDelgate(int i);        private void button1_Click(object sender, EventArgs e)
        {
            System.Threading.ThreadStart ts = new System.Threading.ThreadStart(Compute);
            System.Threading.Thread td = new System.Threading.Thread(ts);
            td.Start();
            button1.Enabled = false;
        }        private void Compute()
        {
            DateTime start = DateTime.Now;
            for (int i = 0; i < 90000000; i++)
            {
                TimeSpan ts = DateTime.Now - start;
                if (ts.TotalSeconds >= 2)
                {
                    label1.Invoke(new MyIntDelgate(Update),i);
                    start = DateTime.Now;
                }
            }
            button1.Enabled = true;
        }        private void Update(int i)
        {
            this.label1.Text = i.ToString();
        }

解决方案 »

  1.   


    我觉得this.label1.Text = i.ToString(); 这个会报跨线程不可操作的异常
    还要委托处理下
    每2秒钟返回一次
    这个考虑线程计时器Threading.Timer
      

  2.   

    不需要多线程就可以完成啊
    form2窗体放一时钟2秒触发一次将循环的值赋给公共变量,
    form1要赋值的控件设为pulic 
    直接给控件赋值就可以了
      

  3.   

    这个可能因为循环占用了全部的资源,导致timer无法正常运行.
      

  4.   

    这个情况下建议楼主使用BackgroundWorker来做,可以参考这里的文章,
    使用BackgroundWorker组件进行异步操作编程
    http://blog.csdn.net/zhzuo/archive/2008/07/23/2699305.aspx
    摘要:本文介绍了BackgroundWorker组件的功能及在基于事件的异步操作编程中的应用,并对组件的实现原理进行简述。
      

  5.   

    请大家仔细看题目要求!是在form2中点击button2,执行多线程,并且将结果随时返回到form1的控件中!!!!!给出一些具体代码的diandian82:
    你的button2点击如何写?并不是能解决问题,就可以绕过button2中的多线程操作!!,假如在button2的单击中,要执行的是从数据库中读取数据,不用多线程行吗?
    事实上,我问的主要是:跨多线程,如何跨窗体传值!!我没说清楚?
      

  6.   

    .Net多线程总结(一) 
      

  7.   

    请高手给出button2单击代码!!!
      

  8.   

    至于跨线程到ui显示结果这一节太简单,就不说了,没两秒返回结果可以这样
    int start=Environment.TickCount;
    int end;
    int outputindex=0;
    for (int i = 0; i < 90000000; i++)
                {
                    end=Environment.TickCount;
                    if( (end-start)/2>outputindex)
                    {
                        //outupt i to form1;
                        outputindex++;
                    }
                } 
      

  9.   

    to yuwenge:
    --------------------
    能给出跨线程在form1中显示结果的代码吗?我在这里憋了几天了,我是新手,才看C#没多久
      

  10.   

    我要的是单击button2开始多线程,用其中的值随时刷新form1中控件,不是单击button1开始多线程!!!刷新自己的控件!!!