Chúng tôi có một ứng dụng máy tính để bàn thực hiện một bộ tính toán khá nghiêm ngặt trong một chuỗi nền. Các phần của phép tính này được thực hiện trong một thư viện không được quản lý mà chúng ta truy cập thông qua interop. Những gì chúng tôi đang tìm kiếm là, khi chúng tôi bắt đầu tính toán, chuỗi giao diện người dùng không phản hồi trong suốt thời gian tính toán. Chúng tôi đã được ấn tượng rằng khuôn khổ sẽ xử lý các thread chuyển đổi để cho phép giao diện người dùng để tiếp tục được đáp ứng, nhưng đó không phải là trường hợp. Chúng tôi đã tìm thấy rằng chúng tôi có thể chèn một Thread.Sleep (0) hoặc Application.DoEvents() để cho phép giao diện người dùng được đáp ứng. Điều này có tác dụng phụ làm chậm tính toán. Ngoài ra, các phần của phép tính được thực hiện bởi mã không được quản lý có thể mất tối đa 30 giây để hoàn thành và trong thời gian này, ứng dụng luôn không phản hồi. Toàn bộ phép tính có thể mất từ 2 đến 5 phút để hoàn thành..NET Threading Model và Application.DoEvents vs. Thread.Sleep
Điều này dẫn đến các câu hỏi sau:
- mô hình luồng NET framework liên quan đến giao diện người dùng và interop với là gì?
- Chúng tôi có sai khi giả định rằng khung công tác phải xử lý chuyển đổi luồng giữa chủ đề nền và giao diện người dùng?
- Sự khác nhau giữa việc sử dụng Thread.Sleep và Application.DoEvents trong trường hợp này là gì và được ưu tiên hơn cái kia?
LƯU Ý: rất cũ Q & A; tìm kiếm các cuộc thảo luận mới hơn để có được câu trả lời hay về các giải pháp hiện có. – ToolmakerSteve