Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何为同时发生的多个进程拆分进度条_Wpf - Fatal编程技术网

Wpf 如何为同时发生的多个进程拆分进度条

Wpf 如何为同时发生的多个进程拆分进度条,wpf,Wpf,我有多个繁重的进程同时发生,我很困惑,如何在一个进度条中显示每个进程的进度。正如我在Torrent这样的软件中看到的,它们将进度条拆分为多个进程。你能帮我创建这样的进度条吗?我手上还有telerik进度条 任何帮助都将不胜感激。您可以为每个流程使用单个进度条(这是最简单的) 要对所有流程使用单个ProgressBar,您需要首先计算整个工作量,然后让每个流程将其进度报告给整个进度 范例 2个进程:进程A读取2000条记录,进程B读取6000条记录。 要计算总体进度,请执行以下操作: progre

我有多个繁重的进程同时发生,我很困惑,如何在一个进度条中显示每个进程的进度。正如我在Torrent这样的软件中看到的,它们将进度条拆分为多个进程。你能帮我创建这样的进度条吗?我手上还有telerik进度条


任何帮助都将不胜感激。

您可以为每个流程使用单个进度条(这是最简单的)

要对所有流程使用单个ProgressBar,您需要首先计算整个工作量,然后让每个流程将其进度报告给整个进度

范例

2个进程:进程A读取2000条记录,进程B读取6000条记录。 要计算总体进度,请执行以下操作:

progress = (2000/(2000 + 6000)) * (progressA / 2000) + 
           (6000/(2000 + 6000)) * (progressB / 6000);
一般而言:

totalProgress = sum for all progresses (totalEffortA/totalEffort) * (progressA / totalEffortA)

根据我的理解,您已经为各个流程创建了许多进度条,您只需要创建一个进度条,将它们汇总为一个进度条

如果是这种情况,您可以将事件处理程序附加到每个流程的进度报告更改,并在通知该处理程序时,将该属性设置为:

var count = allProcesses.Count;
var all = allProcesses.Sum(p => p.Progress);
//You could replace the following with max = count * 100 if that's the case
var max = allProcesses.Sum(p => p.Max); 
overallProgressBar.Minimum = 0;
overallProgressBar.Maximum = max;
overallProgressBar.Value = all;

注意:假设所有进程的进度范围都是
0-100

这样,您就可以假设所有作业所需的工作量相等。@Erno,一旦您有了各个进程的数据,就没有任何区别了。我更新了我的答案,这不是我的意思。你假设作业A中的100个进度等于作业B中的100个进度。@Erno,错了。在我更新的示例中,所谓的100是每个进程的单个值。