如何动态创建线程并在完成工作后重启每个线程?
例如,我有许多计算机名称定义为类的List:
public class GComputers
{
private List<string> list;
public GComputers()
{
list = new List<string>();
}
public List<string> GetList()
{
lock (list)
{
List<string> c_list = list.ToList<string>();
return c_list;
}
}
public void SetList(List<string> List)
{
lock (list)
{
list = List.ToList<string>();
}
}
public int GetCount()
{
return list.Count();
}
}
在主程序中我有功能:
1.从类中获取计算机名称并从列表中删除名称
public static string GetPCName()
{
string pcname = null;
List<string> gl = adc.GetList();
foreach (string comp in gl)
{
pcname = comp;
gl.Remove(comp);
adc.SetList(gl);
break;
} // End foreach.
return pcname;
}
2.做一些与这台电脑有关的工作(例如,只显示电脑名称并睡3秒钟)
public static void DoWork()
{
string pctocheck = GetPCName();
Console.WriteLine("PCName: {0}",pctocheck);
Thread.Sleep(1000);
}
3.创建线程的线程管理器
public static void ThreadManager()
{
for (int i = 0; i < 10; i++)
{
Thread t = new Thread(DoWork);
t.Name = "Thread_" + i;
t.Start();
Console.WriteLine("Thread {0} started: ",t.Name);
}
}
main()的一部分:
class Program
{
static GComputers adc;
static void Main(string[] args)
{
adc = new GComputers();
ThreadManager();
}
}
此代码一次只能创建和启动10个线程。如何重新启动每个计算机,直到计算机列表超过0项?
答案 0 :(得分:0)
您正在尝试创建ThreadPool
。
查看此处:https://msdn.microsoft.com/en-us/library/system.threading.threadpool(v=vs.110).aspx
如果你想自己做。创建10个线程,他们将检查AutoResetEvent
。将项目放入工作队列时,只需触发AutoResetEvent即可。只允许一个线程发出信号来处理工作项目。