我是刚开始学习多线程的,之所以用到多线程是希望加快速度
Class clsA
{
 private clsB myClsB;
 private bool BigProcess
{
 private bool RunResult = myClsB.run();
 if (RunResult==True)
 {
   //Carry on
  }
  else 
   {
    //Action Termiate 
    return false;
   }
  
}
}Class clsB
{
  public bool Run()
  {
   //多线程在这里面
  }
  Private void Thread1()
  {
   //........
  }
  Private void Thread2()
  {
    //....
  }
}现在是clsB里面的Run,为了提高效率run里面并行执行几个线程。但是我clsA里面要等待Run所有的线程结束,如果所有线程返回的都是true那么就继续执行,如果其中一个线程返回false那么程序停止 现在不知道怎么写了。求线索谢谢大家

解决方案 »

  1.   

    线程里想停就Sleep。
    线程是为了
    1充分利用多CPU,
    2在等待数据网络访问时后可以不用闲着
      

  2.   

    用委托吧,在 clsA里面设置状态值,子线程返回后,改变 clsA的状态值,当所有的线程执行结束后,综合判断状态值,执行后面的操作。
      

  3.   

    合并结果,可以用AutoResetEvent标识信号
    // Simultaneously calculate the terms.
            ThreadPool.QueueUserWorkItem(
                new WaitCallback(CalculateBase));
            ThreadPool.QueueUserWorkItem(
                new WaitCallback(CalculateFirstTerm));
            ThreadPool.QueueUserWorkItem(
                new WaitCallback(CalculateSecondTerm));
            ThreadPool.QueueUserWorkItem(
                new WaitCallback(CalculateThirdTerm));        // Wait for all of the terms to be calculated.
            WaitHandle.WaitAll(autoEvents);
      

  4.   

    雅琪MM开始转到C#了呀?嘿嘿.VB6的多线程不能满足要求么?
      

  5.   

    但是我clsA里面要等待Run所有的线程结束,如果所有线程返回的都是true那么就继续执行,如果其中一个线程返回false那么程序停止
    -------------------------------------------
    推荐的做法是用标记变量  表示状态,默认true 有一个线程为false 就置为了false每个线程中都要轮训判断标记变量 用于判断是否继续执行。还有一种暴力的方法 就是Abort 但是会抛异常 并且会导致资源不被释放。
      

  6.   

    这个好像是三国杀得头像哦我现在就是这么做的,尝试了threadpool,这个需要我预先知道多少个进程(当然我也不太会用..);还尝试了Task这个挺好的,但是客户的framework版本没到4.0.谢谢
      

  7.   

    哥,你这例子举的貌似有点纠结人啊。我给你举使用多线程实现窗体等待的例子吧。
    Form1:public Form1()
            {
                InitializeComponent();
                Form.CheckForIllegalCrossThreadCalls = false;
            }
    private void button1_Click(object sender, EventArgs e)
            {
              Form2 wait = new Form2();
                ThreadStart start = delegate
                {
                   Thread.Sleep(2000);//在此例子中窗体关闭太快了,所以用这个办法给用户看效果的
                    //这个地方就是放子线程的内容,或者子线程代码
                    while (true)
                    {
                        if (wait.IsOpen)
                        {
                            if (wait.IsHandleCreated)
                            {
                                wait.Close();
                            }
                            break;
                        }
                    }
                };            Thread tr = new Thread(start);
                tr.Start();
                wait.ShowDialog();
            }
    Form2:
    public bool IsOpen;
            private void Form2_Load(object sender, EventArgs e)
            {
                IsOpen = true;
            }源码你要是话 q我  号码:823783931