目前用的Winform项目碰到个问题不知如何解决首先有个UI线程和一个操作线程Thread1,  Thread1中会执行方法 A B C.三个方法的执行顺序为A->B->B->B->C 
方法B会重复执行多次
每个方法必须得到上个方法的结果..再继续 .每个方法操作某个时间段没完成即释放资源.置为失败..
所以想再加一个操作线程Thread2 来作为 Thread1的子线程 执行每个方法.
 Thread.Join()会阻塞了UI线程.不合适此项目. 
Thread2 只是需要阻塞Thread1得到结果后释放Thread2  继续执行Thread1
如何实现这个需求..求代码..多线程WinFormC#多个子线程阻塞

解决方案 »

  1.   

    你上网查查 线程wait()和sleep()方法的用法就知道了 应该有例子
      

  2.   

     static void Main(string[] args)
            {
                int i = 0;
                Func<int> A = new Func<int>(() =>
                { //模拟别的操作
                    Thread.Sleep(1000);
                    return i + 1;
                }
                );            Func<Task<int>, int> B = new Func<Task<int>, int>(
                    ta =>
                    {
                        //模拟别的操作
                        Thread.Sleep(100);
                        int value = ta.Result;
                        return value + 2;
                    }
                    );            Action<Task<int>> C = new Action<Task<int>>(ta => Console.WriteLine("最后结果为{0}", ta.Result.ToString()));            Task<int> tA = new Task<int>(A);
                var tB = tA.ContinueWith<int>(B);
                tB = tB.ContinueWith<int>(B);
                tB = tB.ContinueWith<int>(B);
                var tC = tB.ContinueWith(C);
                tA.Start();
                Console.WriteLine("主线程正在运行");
                Console.ReadKey();
            }
      

  3.   

    就题答题
    using System.Threading.Tasks;
    using System.Threading;
      

  4.   

    看了半天总算知道你想干什么了,之前还这没看懂你的问题给你个解决办法。
    建立一个AutoResetEvent对象are
    比如执行A的子线程定义为thread_a,b的为thread_b,c的为thread_c
    在thread_a的start下面写一句are.waitone
    在thread_a执行并且返回结果的最后面写一句are.set如法炮制,OK了
      

  5.   

    同意楼上,使用事件等待,eventwaithandle可以很方便的控制线程间的调度,
    如果不了解该类,课可以给你一个参考:http://www.cnblogs.com/yy0910/archive/2012/11/06/2757424.html