2010-04-14 16 views
5

Korzystam z poniższego kodu, aby zaktualizować pasek postępu.Jak zaktualizować pasek postępu w środowisku wykonawczym za pomocą C#

 ProgressBar.Visible = true; 
     ProgressBar.Minimum = 1; 
     ProgressBar.Maximum = PortCount; 
     ProgressBar.Value = 1; 
     ProgressBar.Step = 1; 

     int intdata = 5; 
     for (int x = 1; x <= intdata; x++) 
      { 
      ProgressBar.PerformStep(); 
     } 

     MessageBox.Show("Done"); 

Ale nie jest aktualizowany podczas pracy. Czy to dlatego, że pasek postępu znajduje się w tym samym wątku. Jeśli tak, jak zaktualizować ten postęp z innego wątku. Pomoc ...

Odpowiedz

6

Nie podajesz czasu pompy komunikatów, aby zaktualizować sterowanie.

Chociaż obaj z nich są złe, można zrobić:

  • połączenia Refresh sprawie kontroli
  • połączeń Application.DoEvents
6

Czy to Windows Forms? Calling Refresh() na ProgressBar powinien to zrobić. Możesz również użyć Application.DoEvents, co pozwoli Twojemu interfejsowi odpowiedzieć na dane wejściowe użytkownika zamiast blokować podczas procesu.

Lepszym pomysłem byłoby użycie klasy BackgroundWorker. Wykonaj pracę w wątku w tle i wyślij aktualizacje postępu do wątku interfejsu użytkownika za pomocą metody ReportProgress. Dzięki temu wątek interfejsu użytkownika jest responsywny.

+0

+1 dla BackgroundWorker. – leppie

Powiązane problemy