Обновление статуса в Winform в BackgroundWorker - PullRequest
0 голосов
/ 16 марта 2010

У меня есть многошаговый процесс BackgroundWorker. Я использую индикатор выполнения, потому что некоторые из этих шагов выполняются на сервере iSeries, поэтому нет никакого способа определить процент. Я представляю себе ярлык с обновлениями после каждого шага. Как бы вы порекомендовали обновить метку на winform, чтобы отразить каждый шаг?

Подумал, я бы добавил немного больше. Я вызываю некоторые программы CL и RPG с помощью хранимой процедуры на iSeries (или IBM i или AS / 400, или на компьютере среднего уровня, работающем под OS / 400 ... er ... i5 / OS (черт возьми, IBM не придерживается того же имени год-к-году)).

В любом случае мне нужно подождать, пока этот шаг не будет полностью завершен, прежде чем я смогу продолжить на стороне winform. Я думал об отправке отзыва пользователю с указанием основных шагов.

  1. Сброс данных в iSeries
  2. Бег на конец месяца
  3. Создание отчетов
  4. Загрузка окончательных результатов

Я, наверное, должен был дать это в начале. Извини за это. Я стараюсь, чтобы мои вопросы были достаточно общими, чтобы другие могли использовать их позже, а не как свою конкретную задачу.

Ответы [ 2 ]

1 голос
/ 16 марта 2010

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

(Как уже упоминалось, если они через 10%, отправьте 10, если они через 50%, отправьте 50)

Использование BackgroundWorker bgWrk

Добавить следующее событие:

bgWrk.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler(bgWrk_ProgressChanged);
// Note: This method is invoked on the UI thread

void bgWrk_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
{
    // Add progress to whatever UI element needs updating. The below simply uses a progress bar.
    prog.Value = e.ProgressPercentage;
}

После каждого важного шага, который, по вашему мнению, заслуживает обновления пользователя, выполните следующие действия:

bgWrk.ReportProgress(intValue);

Пара заметок:

  • Вы также можете передать Object в методе ReportProgress(), чтобы иметь возможность обновить метку строковым объектом и т. Д., Однако индикатор выполнения по-прежнему является универсальным символом «Hold on». я что-то делаю "

  • Если у вас есть какой-либо неопределенный опрос, и вы используете ProgressBar, попробуйте использовать его как Indeterminate ProgressBar, или спиннер или тому подобное. WPF имеет встроенное свойство, позволяющее сделать индикатор выполнения неопределенным, что полезно.

0 голосов
/ 16 марта 2010

Сколько там шагов? Если есть 10 шагов, просто используйте маркер повышения на 10% в конце каждого успешно завершенного шага.

...