我使用以下函数创建了一个使用动态线程的应用程序:
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执行。问候和感谢您的宝贵帮助。
答案 0 :(得分:0)
由于您不想一次运行一个线程,我只需设置一个bool来确定在开始下一个线程之前前一个线程是否仍处于活动状态。
我确保正确处理线程排序,因为如果您正在处理等待同一函数的多个线程,则不保证FIFO(设置线程优先级不是很重要)解决这个问题。)