public delegate void StartDelegate(int i);//用到的委托private void Method1()
{
for(int i=0;i<9;i++)
{//for1
    for(int j=0;j<3;j++)
    {//for2
         //开启线程
         StartDelegate anpd = new StartDelegate(abc);
         anpd.BeginInvoke(i,null,null);
    }//for2    //等for2里的三个线程都工作完毕后,才能继续for1循环
    //此处用此方法虽然控制住线程,但我程序运行很慢,好像死机一样,怎么改一下?
    while(ThreadNum!=0)
    {
    }
    ThreadNum=3;}//for1
}private void abc(int i)
{
     //可能是几分钟的操作
     ......
     ThreadNum=ThreadNum-1;
}

解决方案 »

  1.   

    你定义三个全局变量flag1,flag2,flag3=false
    做完那三个线程后就分别将它们赋值为true
    那个while的函数写成这样就行了:
        while(true)
        {
           if(flag1==true&&flag2==true&&flag3=true)
             break;
           Application.Doevents();
           Thread.Sleep(1000);
        }
    你每执行一次睡眠一秒种就不会好像死掉一样了
      

  2.   

    我的三个线程都执行同一个方法,只用true,false控制不行吧
      

  3.   

    假如你是用同一个函数,像你那样,设个全局变量为=3,每次减一也行
    关键不在这,关键在于你每次循环要睡眠一下
           Application.Doevents();
           Thread.Sleep(1000);
      

  4.   

    多谢handsome0916() ,你说的对。
    关键就在Application.Doevents();
           Thread.Sleep(1000);
    别的我自已搞定了,现在基本好了
      

  5.   

    循环中加上Application.Doevents();就不死机了