Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.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
C# 跨不同流程(循环)“分支”进度_C#_Branch_Progress - Fatal编程技术网

C# 跨不同流程(循环)“分支”进度

C# 跨不同流程(循环)“分支”进度,c#,branch,progress,C#,Branch,Progress,客观的 我正在尝试建立一个支持分支的进度跟踪机制 摘要 这里的主要概念是,在每个阶段,我都知道当前的索引和步骤数,直到这个阶段完成 示例场景 假设这些项目是连续运行的,则进度百分比如下所示: 0% 10% 20% 30% 40% 50% 50% 75% 100% 100% 提问时间 首先,我所做的事情的正确术语是什么?因此,我无法正确搜索 第二,我所做的数学是什么?我必须跟踪哪些变量 最终产品 我希望最终的界面如下所示: class Ta

客观的

我正在尝试建立一个支持分支的进度跟踪机制

摘要

这里的主要概念是,在每个阶段,我都知道当前的索引和步骤数,直到这个阶段完成

示例场景

假设这些项目是连续运行的,则进度百分比如下所示:

0%
    10%
    20%
    30%
    40%
    50%
50%
    75%
    100%
100%
提问时间

首先,我所做的事情的正确术语是什么?因此,我无法正确搜索

第二,我所做的数学是什么?我必须跟踪哪些变量

最终产品

我希望最终的界面如下所示:

class TaskManagerExample
{
    void Execute(Task[] tasks)
    {
        var pm = new ProgressManager(); // <- this class does the magic

        // v-- and this is how the magic is used :)
        pm.ProgressChanged += (object sender, EventArgs e) =>
        {
            progressBar1.Value = (sender as ProgressManager).TotalProgress;
        };

        pm.SetTotal(tasks.Length);

        foreach (var task in tasks)
        {
            task.Execute(pm.Branch());
            pm.NextStep();
        }
    }
}

class Task
{
    protected int SubTasks = 0;
    public Task(int subTasks){ this.SubTasks = subTasks; }

    public void Execute(ProgressManager pmb)
    {
        pmb.SetTotal(this.SubTasks);

        for(int i = 0; i < this.SubTasks; i++)
        {
            // do something
            pmb.NextStep();
        }
    }
}
我的问题是ProgressManager的实现。我已经能够实现父子关系,所以Branch和NextStep都可以。我对TotalProgress应该如何实施感到困惑。
如何遍历该树来计算正确的进度位置?

您是否能够向任务中添加另一个属性,该属性需要估计工作量,并使用聚合的工作量得出百分比估计值?否,原因如下:1。我目前的使用方式无法使用它。2.将这些信息保存在负责It进度的类中比保存在任务中更干净。3.为了使分支更清晰、更明显。任务不应该知道向谁报告其进度,您应该实现进度查看,然后在任务管理器中处理事件。任务管理器可以跟踪当前步骤以及当前正在运行的任务的0到100%的进度。任务管理器也可以实现进度,计算很简单,当前进度=当前步骤*当前步骤进度/步骤数。@RonBeyer我同意你所说的,除了一部分……我有子任务。单个任务必须像TaskManager一样工作。顶级任务管理器不知道子任务。我需要一个可以在任何级别处理这种关系的实现。子任务可以以相同的方式计算进度,方法是使用其子任务的进度来计算和更新自己的进度。不过,在这一点上,任务管理器几乎与任务完全相同,因此您真正需要的只是任务类。。。
class TaskManagerExample
{
    void Execute(Task[] tasks)
    {
        var pm = new ProgressManager(); // <- this class does the magic

        // v-- and this is how the magic is used :)
        pm.ProgressChanged += (object sender, EventArgs e) =>
        {
            progressBar1.Value = (sender as ProgressManager).TotalProgress;
        };

        pm.SetTotal(tasks.Length);

        foreach (var task in tasks)
        {
            task.Execute(pm.Branch());
            pm.NextStep();
        }
    }
}

class Task
{
    protected int SubTasks = 0;
    public Task(int subTasks){ this.SubTasks = subTasks; }

    public void Execute(ProgressManager pmb)
    {
        pmb.SetTotal(this.SubTasks);

        for(int i = 0; i < this.SubTasks; i++)
        {
            // do something
            pmb.NextStep();
        }
    }
}