Как я могу использовать индикатор выполнения в задачах без определенной длины или параллельном цикле? - PullRequest
2 голосов
/ 10 февраля 2012

Мне нужен индикатор выполнения в приложении формы Windows, но мой процесс не зависит от длины, поэтому я не могу максимально увеличить значение индикатора выполнения.

Я должен увеличить значение индикатора выполнения с помощью класса LongProcess Run-метод истекшее время.

void start_click()
{
    button1.Enabled=false;

    Task.Factory.StartNew(()=>{
        Parallel.Foreach(files,f=>{
            LongProcess process =new LongProcess(); // Long-running process (is not my control)
            process.Run(f); 
                    //progressBarValueIncrement();

        });
    }).ContinueWith(t=>{
        // completed
        BeginInvoke(new Action(() =>    button1.Enabled=true));
    });
}

Как мне это реализовать?

1 Ответ

2 голосов
/ 10 февраля 2012

Вы можете увеличить индикатор выполнения на некоторый процент от оставшегося незаполненного значения. Это будет означать, что индикатор выполнения никогда не будет заполняться, и будет наполняться все медленнее и медленнее.

Таким образом, в первом приращении вы заполняете индикатор выполнения на 50%, затем в следующем приращении вы заполняете 50% оставшейся суммы, то есть 25% в общей сложности на 75%, затем 50% от оставшихся 25%, всего 87,5% и т. Д. И т. Д. .

Вы можете поставить его так, чтобы процент времени, который вы использовали, был основан на том, насколько полон был индикатор выполнения, поэтому начните с 5% в начале, чтобы он не заполнялся слишком быстро в начале, затем перейдите к более высокий процент, так что вы можете видеть, что бар движется еще ближе к концу ...

Если вы не знаете, сколько времени займет что-то, подходит ли индикатор прогресса? Возможно, вам было бы лучше с чем-то, что показывало прогресс, но не столько, сколько было выполнено ...

...