public class ThreadPoolEx
{
private class WorkItemInfo
{
public AutoResetEvent AutoResetEvent { get; set; }
public WaitCallback WaitCallback { get; set; }
public object UserState { get; set; }
}
public int excenum = 0;
private List<AutoResetEvent> handlerStack = new List<AutoResetEvent>();
public void QueueWorkItem(WaitCallback callBack, object userstate)
{
WorkItemInfo info = new WorkItemInfo();
info.AutoResetEvent = new AutoResetEvent(false);
handlerStack.Add(info.AutoResetEvent);
info.WaitCallback = callBack;
info.UserState = userstate;
ThreadPool.QueueUserWorkItem((state) =>
{
WorkItemInfo workItemInfo = (WorkItemInfo)state;
try
{
workItemInfo.WaitCallback(workItemInfo.UserState);
}
finally
{
workItemInfo.AutoResetEvent.Set();
}
}, info);
}
public void WaitAllComplete()
{
foreach (AutoResetEvent handler in handlerStack)
{
excenum++;
handler.WaitOne();
}
}
}
网上找到的关于c#线程池扩展
最新推荐文章于 2022-11-21 08:31:06 发布