2011-08-19 7 views
8

Tôi có một chương trình thực hiện một số công việc sao chép (thông qua File.Copy) có thể kéo dài vài phút. Khi người dùng mang một cửa sổ khác đến nền trước trong thời gian này, cửa sổ chương trình sẽ trống vì nó không tự vẽ lại.C# Cửa sổ bị trống khi bận -> Progressbar? Nhưng bằng cách nào?

Bây giờ tôi muốn hiển thị ProgressBar trong cửa sổ phụ ở giữa màn hình, nhưng cửa sổ đó cũng sẽ trống.

Vì vậy, tôi bắt đầu nó trong một chuỗi khác không có tác dụng.

Tôi khá chắc chắn ai đó đã làm điều này trước đây nhưng tôi không thể tìm thấy ví dụ làm việc. Bất kỳ ý tưởng?

+3

Thực hiện quy trình chạy dài của bạn trong BackgroundWorkerThread. – ChrisF

Trả lời

4

Có ví dụ hay trong tài liệu về số BackgroundWorker class.

+0

cảm ơn. những điều như vậy là quá khó để tìm thấy nếu bạn không biết chính xác những gì bạn đang tìm kiếm .... ai có thể nghĩ rằng đây là một thành phần? ^^ – ihavenoaccount

+0

Đó là những gì stackoverflow đã được tạo ra cho) Bạn đang chào đón! – artplastika

0

Bạn có thể sử dụng lớp BackgroundWorker.

Xem answer.

0

ChrisF điều này là đúng. Hoạt động dài của bạn nên được thực hiện trong chuỗi BackgroundWorker. Bạn có thể sử dụng BackgroundWorker để báo cáo tiến trình và móc lên đến thanh tiến trình trên biểu mẫu của bạn.

0

Bạn cần chỉ định hoạt động của mình bằng cách sử dụng BackgroundWorker. Có nhiều cách khác để tạo luồng cho hoạt động, nhưng cách này có lẽ là đơn giản nhất và sẽ tiếp tục thực hiện việc bơm thông báo ở nền trước nên Windows không nghĩ rằng ứng dụng của bạn đã ngừng đáp ứng.

Một tùy chọn khác là sử dụng Thread và sử dụng Thread.Join để đợi tác vụ nền hoàn thành, vì Thread.Join cũng gửi thông tin bơm tiêu chuẩn tới Windows trong khi chờ.