目前用的Winform项目碰到个问题不知如何解决首先有个UI线程和一个操作线程Thread1, Thread1中会执行方法 A B C.三个方法的执行顺序为A->B->B->B->C
方法B会重复执行多次
每个方法必须得到上个方法的结果..再继续 .每个方法操作某个时间段没完成即释放资源.置为失败..
所以想再加一个操作线程Thread2 来作为 Thread1的子线程 执行每个方法.
Thread.Join()会阻塞了UI线程.不合适此项目.
Thread2 只是需要阻塞Thread1得到结果后释放Thread2 继续执行Thread1
如何实现这个需求..求代码..多线程WinFormC#多个子线程阻塞
方法B会重复执行多次
每个方法必须得到上个方法的结果..再继续 .每个方法操作某个时间段没完成即释放资源.置为失败..
所以想再加一个操作线程Thread2 来作为 Thread1的子线程 执行每个方法.
Thread.Join()会阻塞了UI线程.不合适此项目.
Thread2 只是需要阻塞Thread1得到结果后释放Thread2 继续执行Thread1
如何实现这个需求..求代码..多线程WinFormC#多个子线程阻塞
{
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();
}
using System.Threading.Tasks;
using System.Threading;
建立一个AutoResetEvent对象are
比如执行A的子线程定义为thread_a,b的为thread_b,c的为thread_c
在thread_a的start下面写一句are.waitone
在thread_a执行并且返回结果的最后面写一句are.set如法炮制,OK了
如果不了解该类,课可以给你一个参考:http://www.cnblogs.com/yy0910/archive/2012/11/06/2757424.html