在C#中管理Threadpool类中的线程执行

时间:2016-11-28 17:18:46

标签: c# multithreading

我使用以下函数创建了一个使用动态线程的应用程序:

foreach (DataGridViewRow row in dtConexiones.Rows)
        {
            Object ip = Convert.ToString(row.Cells["ip"].Value);
            ThreadPool.QueueUserWorkItem(new WaitCallback(setTimer), ip);
            Console.Read();
        }

您可能会注意到,根据" ip"中的记录数创建了多个线程。列,在Datagridview控件中,我的意思是,我有五个记录,所以我有五个线程。

以同样的方式ThreadPool.QueueUserWorkItem (new WaitCallback (setTimer), ip); 创建线程,并执行setTimer函数作为参数接收值ip,这是一个String,为每个线程创建一个计时器。

这个过程完美无缺,线程被创建,但是当程序执行时,线程1执行一次,然后线程2无限期地运行。

如何管理ThreadPool创建的线程,以便逐个执行它们,而无需运行线程x?

在下面的执行图像中,您可以看到线程192.168.1.123是如何执行两次的,并且从那里开始,线程192.168.1.124无限期地执行,而我想要的是两者都以par执行。问候和感谢您的宝贵帮助。

enter image description here

1 个答案:

答案 0 :(得分:0)

由于您不想一次运行一个线程,我只需设置一个bool来确定在开始下一个线程之前前一个线程是否仍处于活动状态。

我确保正确处理线程排序,因为如果您正在处理等待同一函数的多个线程,则不保证FIFO(设置线程优先级不是很重要)解决这个问题。)