如何动态创建线程并重启每个线程?

时间:2015-06-29 07:41:13

标签: c# multithreading

如何动态创建线程并在完成工作后重启每个线程?

例如,我有许多计算机名称定义为类的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项?

1 个答案:

答案 0 :(得分:0)

您正在尝试创建ThreadPool

查看此处:https://msdn.microsoft.com/en-us/library/system.threading.threadpool(v=vs.110).aspx

如果你想自己做。创建10个线程,他们将检查AutoResetEvent。将项目放入工作队列时,只需触发AutoResetEvent即可。只允许一个线程发出信号来处理工作项目。