我正在编写一个使用报表查看器创建多个 PDF 文件的获胜表单。这些 PDF 文件分为 4 个主要部分,每个部分负责创建特定报告。这些进程正在创建至少 1 个文件,最多为用户数量(当前为 50 个)。
该程序已经存在,按顺序使用了 4 种方法。为了在用户数量不断增长的情况下获得额外的性能,我想将这些方法与邮件进程分开,分成 4 个单独的线程。
虽然我是使用 C# 多线程的新手,但我阅读了许多文章如何实现这一点。我唯一不确定的是我应该从哪个方向开始。当我阅读多篇博客文章时,我不确定是使用 4 个单独的线程、一个线程池还是多个后台工作人员。(或者并行编程应该是最好的方法吗?)。博客文章告诉我是否有超过 3 个线程使用线程池,但另一方面告诉我如果使用 winforms,请使用 backgroundworker。哪个选项是最好的(为什么)?
最后,我的主线程必须等待所有进程结束才能继续。
有人可以告诉我什么是解决我的问题的最佳方法。
* 编辑后的额外信息 *
我忘了告诉(在我阅读了您的评论和可能的解决方案之后)。这些方法共享一个“IEnumerable”,仅供阅读。在触发方法(不必按顺序运行)之后,这些方法会触发用于向 UI 发送状态更新的事件。我认为使用单独的线程触发事件即使不是不可能也很困难,因此应该有某种回调函数来报告运行时的状态更新。
伪代码中的一些示例。
main()
{
private List<customclass> lcc = importCustomClass()
export.CreatePDFKind1.create(lcc.First(), exportfolderpath, arg1)
export.CreatePDFKind2.create(lcc, exportfolderpath)
export.CreatePDFKind3.create(lcc.First(), exportfolderpath)
export.CreatePDFKind4.create(customclass2, exportfolderpath)
}
namespace export
{
class CreatePDFKind1
{
create(customclass cc, string folderpath)
{
do something;
reportstatus(listviewItem, status, message)
}
}
class CreatePDFKind2
{
create(IEnumerable<customclass> lcc, string folderpath)
{
foreach (var x in lcc)
{
do something;
reportstatus(listviewItem, status, message)
}
}
}
etc.......
}