2010-04-14 58 views
5

Tôi đang sử dụng mã bên dưới để cập nhật thanh tiến trình của mình.Cách cập nhật thanh tiến trình trong thời gian chạy bằng cách sử dụng 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"); 

Nhưng, nó không được cập nhật trong thời gian chạy. Có phải vì thanh tiến trình nằm trong cùng một chuỗi không. Nếu vậy, làm thế nào để cập nhật tiến trình này từ một chủ đề khác. Trợ giúp ...

Trả lời

6

Bạn không đưa ra thời gian bơm tin nhắn để cập nhật điều khiển.

Mặc dù hai trong số này là xấu, bạn có thể làm:

  • Gọi Refresh trên sự kiểm soát
  • Gọi Application.DoEvents
6

Đây có phải là Windows Forms? Gọi Refresh() trên ProgressBar nên thực hiện. Bạn cũng có thể sử dụng Application.DoEvents mặc dù sẽ cho phép giao diện người dùng của bạn phản hồi đầu vào của người dùng thay vì khóa trong quá trình.

Ý tưởng tốt hơn là sử dụng lớp BackgroundWorker. Thực hiện công việc trên luồng nền và gửi các cập nhật tiến trình tới luồng giao diện người dùng thông qua phương thức ReportProgress. Điều này giúp cho chuỗi giao diện người dùng của bạn được đáp ứng.

+0

+1 cho BackgroundWorker. – leppie

Các vấn đề liên quan