2009-12-03 5 views
2

У меня есть процесс, который занимает много времени, и я хочу, чтобы окно отображало прогресс. Но я не могу понять, как отобразить прогресс.Показать прогресс в диалоговом окне

Вот код:

if (procced) 
{ 
    // the wpf windows : 
    myLectureFichierEnCour = new LectureFichierEnCour(_myTandemLTEclass); 
    myLectureFichierEnCour.Show(); 

    bgw = new BackgroundWorker(); 
    bgw.DoWork += startThreadProcessDataFromFileAndPutInDataSet; 
    bgw.RunWorkerCompleted += threadProcessDataFromFileAndPutInDataSetCompleted; 

    bgw.RunWorkerAsync(); 
} 

И:

private void startThreadProcessDataFromFileAndPutInDataSet(object sender, DoWorkEventArgs e) 
{ 
    _myTandemLTEclass.processDataFromFileAndPutInDataSet(
     _strCompositeKey,_strHourToSecondConversion,_strDateField); 
} 

Я могу назвать _myTandemLTEclass.processProgress, чтобы получить подсказку о прогрессе.

ответ

6

Вы должны обработать событие ProgressChanged и обновить индикатор выполнения в вашем пользовательском интерфейсе.

В реальной функции, которая делает работу (DoWork обработчик события), вы будете вызывать ReportProgress метод экземпляра BackgroundWorker с аргументом, указывающим количество задачи завершено.

BackgroundWorker example in MSDN Library - это простой фрагмент кода, который выполняет эту работу.

+0

Не забудьте установить свойство WorkerReportsProgress истина на BackgroundWorker – Dabblernl

1

Ваш фоновый поток должен обрабатывать метод DoWork и ProgressChanged.

Вам также необходимо убедиться, что вы включили флаг WorkerReportsProgress в значение true (по умолчанию отключено).

См пример кода:

private void downloadButton_Click(object sender, EventArgs e) 
{ 
    // Start the download operation in the background. 
    this.backgroundWorker1.RunWorkerAsync(); 

    // Disable the button for the duration of the download. 
    this.downloadButton.Enabled = false; 

    // Once you have started the background thread you 
    // can exit the handler and the application will 
    // wait until the RunWorkerCompleted event is raised. 

    // Or if you want to do something else in the main thread, 
    // such as update a progress bar, you can do so in a loop 
    // while checking IsBusy to see if the background task is 
    // still running. 

    while (this.backgroundWorker1.IsBusy) 
    { 
     progressBar1.Increment(1); 
     // Keep UI messages moving, so the form remains 
     // responsive during the asynchronous operation. 
     Application.DoEvents(); 
    } 
} 
Смежные вопросы