您的位置:首页 > 编程语言 > C#

网上找到的关于c#线程池扩展

2013-06-18 15:23 204 查看
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();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐