【问题标题】:BackgroundWorker combined with ThreadPool or ParalellFor C# VS 2010 [closed]BackgroundWorker 结合 ThreadPool 或 ParalellFor C# VS 2010 [关闭]
【发布时间】:2023-03-18 19:18:01
【问题描述】:

我有一个简单的任务想要完成。

我正在尝试使用 C# 在命令行上使用 ffmpeg 对多个文件进行编码。

这就是我想要达到的目标。

假设列表中有“x”个文件。我想同时运行“y”个编码过程。在所有文件都编码后,我正在合并所有 x 文件。编码和合并部分完成。我被困的地方是同时工作。我熟悉 backgroundworker、threadpooling、ParallelFor,但所有这些都没有给我想要的结果。可能是我的方法是错误的。因此,如果有人可以帮助我,我将不胜感激,我应该如何使用一种技术或几种技术的组合来解决这个问题。

附:在文件编码时,我希望能够更新屏幕上的进度条(简单形式)。 显然我希望这个过程尽可能快。

【问题讨论】:

  • 您想产生多个线程来编码多个文件,一旦所有文件完成后您想将新文件合并在一起?
  • all of these are giving me the result that I want。你想要什么结果,你现在得到什么?您可以发布您尝试过的代码吗?
  • @Tsukasa 是的,这正是我想要的。

标签: c# multithreading task-parallel-library backgroundworker parallel.foreach


【解决方案1】:

使用 Parallel.ForEach 和 ParallelOptions 作为参数。该对象有一个属性MaxDegreeOfParallelism 指定并发任务的最大数量。

在回调方法中你可以增加一个进度值,可以在GUI中显示。

【讨论】:

  • 并确保以线程安全的方式增加进度值。
  • @erikH 问题是 Parallel.ForEach 停止了主 UI 线程,因此我无法更新进度条。
  • 那就看this question
猜你喜欢
  • 1970-01-01
  • 2020-11-20
  • 1970-01-01
  • 2014-10-06
  • 1970-01-01
  • 2011-04-19
  • 2011-08-04
  • 1970-01-01
  • 2011-06-04
相关资源
最近更新 更多