как обновить прогресс до пользовательского интерфейса с помощью событий и делегатов - PullRequest
0 голосов
/ 10 декабря 2011

У меня есть кнопка в winform и при нажатии которой будет некоторая обработка, скажем, 5 с.

во время этого процесса, я хочу обновить прогресс (ProgressBar) до пользовательского интерфейса с% выполненной работы.

Как это сделать с помощью событий и делегатов?

Также приветствуются другие подходы (кроме событий и делегатов) ..

Ответы [ 2 ]

5 голосов
/ 10 декабря 2011

Если вы хотите, чтобы ваше приложение реагировало во время процесса, используйте BackgroundWorker. См. Статью MSDN BackgroundWorker Class . Он имеет пример c #, который показывает, как сообщить о прогрессе.

1 голос
/ 10 декабря 2011

Псевдокод ниже. У меня нет компилятора под рукой, поэтому фактический интерфейс ProgressBar может немного отличаться от того, что я помню.

// service

delegate void ProgressDelegate( int CurrentValue, int MaxValue );

void BusinessProcess( ProgressDelegate progress )
{
   // do something
   progress( 20, 100 );

   // do other things
   progress( 50, 100 );

   // do yet another thing
   progress( 100, 100 );
}

// client

void Button1_Click( object sender, EventArgs e )
{
   BusinessProcess(
      (current, max ) => 
      {
         this.ProgressBar1.Maximum = max;
         this.ProgressBar1.Value = current;
         this.ProgressBar1.Refresh();
      }
      );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...