вторник, 30 июня 2009 г.

ProgressBar, BackgroundWorker

Есть достаточно сложный отчет, который выкачивает из базы данных кучу значений обрабатывает их и выгружает результат в Excel. 
Задача - сделать прогресс бар, чтобы пользователь видел, что программа не зависла. 

Делаем следующим образом:

Создаем форму Progress, на нее кидаем label типа "Ожидайте выполнения запроса". Затем кидаем ProgressBar и меняем свойство Style на Marquee.Почему так - тк мы не знаем сколько конкретно будет данных в запросе.

Кидаем на основную форму компонент backgroundWorker.

Создаем обработчик события -


  private void button1_Click(object sender, EventArgs e)
  {
    Progress Progress = new Progress();
    Progress.ShowDialog();
    backgroundWorker1.RunWorkerAsync();
  }


Затем делаем сообственно сам запрос
 

  private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
  {
    //усиленно что-то делает
  }


И на конец закрываем окно с ProgressBar

  private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  {
    Progress.ActiveForm.Close();
  }

Комментариев нет:

Отправить комментарий