创建几个后台工作线程的最好方法是什么?

本文关键字:方法 是什么 线程 工作 后台 几个 创建 | 更新日期: 2023-09-27 18:10:35

我想同时执行几个任务(远程共享上的磁盘IO)。我不想阻塞UI。我认为我需要创建一个自定义类来执行以下操作…

  • 接受请求并将其排队(使用Stack)
  • 检查线程池,如果线程可用,用请求的信息启动它
  • 当每个线程完成时检查堆栈中是否有挂起的请求…

有更好的方法吗?

是否已经有这个类可用?

我应该使用BackgroundWorker类的池还是其他东西?

我是否必须在自定义类中实现BackgroundWorker类,以便我可以创建多个线程?

我想创建多达8个线程删除文件和文件夹。我需要查询堆栈上的项数以更新UI。

我目前有一个单一的后台工作线程的代码来删除文件和文件夹(这使UI从锁定,但它需要很长时间,我倾向于在同一时间运行几个实用程序)。

谢谢,李

创建几个后台工作线程的最好方法是什么?

如果您正在使用。net 4,那么任务并行库看起来正是您所需要的。MSDN的参考资料在这里:http://msdn.microsoft.com/en-us/library/dd460717.aspx。

具体来说,http://msdn.microsoft.com/en-us/library/dd537608.aspx的例子建议替换

foreach (var item in sourceCollection)
{
    Process(item);
}

Parallel.ForEach(sourceCollection, item => Process(item));

小心代码中的死锁;特别是要进行广泛的测试,因为有时在Windows网络堆栈的深处可能会发生奇怪的事情。

你可以使用一个BackgroundWorker池,但注意它是为简单的多线程场景设计的。我建议使用TPL或Threadpool来解决你的问题,但如果你的代码已经使用了一个BackgroundWorker,你会更快,重写它为8而不是使用TPL。

也许这个讨论将有助于你的决定:BackgroundWorker与BackgroundThread