c # opennetCF фоновый работник останавливается после 100 итераций - PullRequest
0 голосов
/ 26 марта 2010

У меня есть фоновый работник, который останавливается после 100 итераций. Как это:

    BackgroundWorker bgWorker = new BackgroundWorker();
    bgWorker.WorkerReportsProgress = true;
    bgWorker.WorkerSupportsCancellation = true;

    bgWorker.DoWork += new OpenNETCF.ComponentModel.DoWorkEventHandler(this.bgWorker_DoWork);
    bgWorker.RunWorkerCompleted += new OpenNETCF.ComponentModel.RunWorkerCompletedEventHandler(this.bgWorker_RunWorkerCompleted);
    bgWorker.ProgressChanged += new OpenNETCF.ComponentModel.ProgressChangedEventHandler(this.bgWorker_ProgressChanged);


    private void bgWorker_DoWork(object sender, DoWorkEventArgs e)
    {
            for(i=0; i<300; i++)
            {   
                bgWorker.ReportProgress(i, i);
            }

    }


    private void bgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        this.labelProgress.Text = e.UserState.ToString(); 
    }

    private void bgWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        MessageBox.Show("finished loading...");
    }

В результате значение labelProgress останавливается на 100, и появляется всплывающее окно с сообщением «Закончилась загрузка ...».

Кто-нибудь имеет представление о том, что не так. Почему поток останавливается на 101 итерации?

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 26 марта 2010

Ваш код вызывает сбой потока BGW. Обязательно отобразите значение e.Error в обработчике событий RunWorkerCompleted, если оно не равно нулю.

Из статьи библиотеки MSDN для Backgroundworker.ReportProgress:

процентProgress
Тип: System.Int32

Процент от 0 до 100 фоновая операция завершена.

Fix:

 bgWorker.ReportProgress(0, i);
0 голосов
/ 26 марта 2010

Я попробовал это (используя .Net 4), и он работает нормально - на экране появляется 299, когда появляется MessageBox. Однако я не использую классы OpenNETCF - может быть, они имеют какой-то эффект? Вы получаете такое же поведение, если вы замените OpenNETCF.ComponentModel на System.ComponentModel?

...