Tôi đã sử dụng BackgroundWorker
để tải xuống một số trang web bằng cách gọi WebClient.DownloadString
bên trong một vòng lặp. Tôi muốn tùy chọn cho người dùng hủy ở giữa nội dung tải xuống, vì vậy tôi gọi số CancelAsync
bất cứ khi nào tôi thấy rằng CancellationPending
đang ở giữa vòng lặp.Tôi làm cách nào để tạm dừng một BackgroundWorker? Hoặc một cái gì đó tương tự
Nhưng bây giờ tôi nhận thấy rằng chức năng DownloadString
thỉnh thoảng đóng băng, vì vậy tôi quyết định sử dụng DownloadStringAsync
thay thế (tất cả điều này bên trong luồng khác được tạo bằng BackgroundWorker
). Và vì tôi không muốn viết lại toàn bộ mã của mình bằng cách thoát khỏi vòng lặp và hàm sau khi gọi DownloadStringAsync
, tôi đã thực hiện một vòng lặp while ngay sau khi gọi nó mà không làm gì ngoài kiểm tra biến số bool Stop
mà tôi quay đúng hoặc khi DownloadStringCompleted
trình xử lý sự kiện được gọi hoặc khi người dùng yêu cầu hủy thao tác.
Bây giờ, điều kỳ lạ là nó hoạt động tốt trên phiên bản gỡ lỗi; nhưng trên bản phát hành, chương trình bị đóng băng trong vòng lặp while như thể đó là chủ đề chính.
WaitHandle hoạt động hoàn hảo. Cảm ơn bạn! – Juan
Vòng lặp tạm dừng/tiếp tục trong công nhân nền http://stackoverflow.com/questions/8359058/pause-resume-loop-in-background-worker –