c # winform фоновый рабочий и индикатор выполнения - PullRequest
1 голос
/ 05 января 2011

Я пытаюсь увеличить индикатор выполнения с помощью BG Worker. В настоящее время я использую 2 рабочих BG, один для добавления данных в базу данных и один для индикатора выполнения. Загрузка БД работает нормально, но индикатор выполнения - нет.

Код:

BackgroundWorker bg2 = new BackgroundWorker();
bg2.DoWork +=new DoWorkEventHandler(bg2_DoWork);
bg2.RunWorkerAsync();

void bg2_DoWork(object sender, DoWorkEventArgs e)
    {

        while (bg1.IsBusy)
            DrawWellPlate.pbar.Increment(1)
    }

bg1 - это поток загрузки базы данных, а pbar - это индикатор выполнения.

Спасибо.

Ответы [ 2 ]

4 голосов
/ 05 января 2011

Вы должны сделать что-то вроде этого, где totalProgress будет отображаться в progressBar, doWork выполняется не в потоке пользовательского интерфейса, что является целью BackgroundWorker

BackgroundWorker bg2 = new BackgroundWorker();
bg2.DoWork +=new DoWorkEventHandler(bg2_DoWork);
.ProgressChanged += new ProgressChangedEventHandler(bg2_ProgressChanged)
bg2.RunWorkerAsync();

void bg2_DoWork(object sender, DoWorkEventArgs e)
    {

        while (bg1.IsBusy)
            worker.ReportProgress(totalProgress);
    }
private void bg2_ProgressChanged(object sender,
            ProgressChangedEventArgs e)
        {
            DrawWellPlate.pbar.Value = e.ProgressPercentage;
        }

, смотрите this детали

2 голосов
/ 05 января 2011

Проблема в том, что bg1 будет всегда сообщать, что он занят, пока выполняет метод DoWork.

Вы должны использовать только ОДИН фоновый рабочий и в его методе do work что-то вроде этого (псевдокод):

void bg1_DoWork(object sender, DoWorkEventArgs e)
{
    while(got_stuff_to_add_to_the_database)
    {
       //do *some* of the work
       AddABit()

       //Update the progress - 5% at a time?
       totalProgress += 5

       //update the progress bar
       ReportProgress(totalProgress)

       if(finished)
       {
           got_stuff_to_add_to_the_database = false;
       }
    }
}
...