Вам нужно использовать BackgroundWorker
. Перетащите его на форму, нажмите backgroundWorker1
и установите для свойства WorkerReportsProgress
значение True
.
Затем перейдите к событиям (через окно свойств) и прикрепите обработчики для
DoWork
, это где вся работа, которая представлена индикатором выполнения. Через это вы будете «сообщать о прогрессе», и фоновый работник будет следить за тем, чтобы ProgressChanged вызывался в потоке пользовательского интерфейса.
ProgressChanged
, здесь вы обновляете пользовательский интерфейс на основе данных о ходе и состоянии, переданных методу
DoWork
событие выглядит примерно так
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
var userState = new StateClass();
while (working)
{
// TODO: do work here
// update the state surrounding this task via userState
userState.property = "some status";
// report the progress so that backgroundWorker1_ProgressChanged gets called
this.backgroundWorker1.ReportProgress(percentComplete, userState);
}
}
ProgressChanged
событие выглядит так
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
// e.UserState contains the state data you passed to ReportProgress,
// you have to cast it to the right type though, since its of type object
var userState = (StateClass)e.UserState;
int progress = e.ProgressPercentage;
// TODO: report progress to the UI with the above variables
}
Теперь все, что вам нужно сделать, это попросить фонового работника сделать работу, позвонив
this.backgroundWorker1.RunWorkerAsync()