2014-11-27 19 views
9

Tôi không biết nhiều về Windows Message Pump nhưng tôi đoán các sự kiện được kích hoạt bằng cách sử dụng Message Pump.Làm sạch thư trong Windows Message Pump

1) Khi điều khiển trình duyệt web của tôi điều hướng tới một số trang web, Nó tạo ra các sự kiện khác nhau của tài liệu hoàn thành, khi tôi đã nhận được những gì tôi cần trong WebBrowser_Document_Completed(), tôi muốn bỏ qua tất cả thêm tài liệu completion.How tôi có thể làm được không?

2) Nếu tôi hiển thị một MessageBox () trong Document_Completed (...), Nó cho thấy nhiều hộp thông báo, cho thấy nó chạy trên threads.but song song khi tôi gỡ lỗi nó, i thấy rằng nó chạy luôn luôn trên thread.so chính khi hai chủ đề khác được tạo ra?

3) Cùng lúc đó, khi tôi bấm chặt chẽ, nó đóng cửa sổ nhưng quá trình vẫn chạy ở chế độ nền, tôi không sử dụng bất kỳ chủ đề khác tôi vẫn thấy hai chủ đề khác khi tôi gỡ lỗi. Cảm ơn rất nhiều.

+0

Ngay khi bạn nhận được là người đầu tiên sự kiện, bạn có thể hủy đăng ký sự kiện hoặc sử dụng cờ để bỏ qua sự kiện? Btw làm thế nào bạn kết luận có nhiều chủ đề? –

+0

@SriramSakthivel Program không đi xa hơn nếu Dialog Result không được trả về, nếu nó chạy trên Same thread, thì bao nhiêu hộp Message được hiển thị đồng thời, đó là cách tôi kết luận – Charlie

+0

Reentracy có thể gây ra vấn đề này. Hiển thị 'Thread.CurrentThread.ManagedThreadId' trong hộp thông báo để xác nhận rằng chúng thực sự là các luồng khác nhau. –

Trả lời

0

Cách trực tiếp nhất để thực hiện việc này là chặn và đánh giá các thông điệp được truyền tới kiểm soát của bạn bằng cách ghi đè phương thức WndProc() của nó. Với một chút quan sát trình gỡ lỗi, bạn có thể xác định hằng số wm_message tương ứng với sự kiện đích của bạn và sau đó thay đổi luồng thực hiện tương ứng. Có một ví dụ khá tốt về điều này trên trang web MSDN: https://msdn.microsoft.com/en-us/library/system.windows.forms.control.wndproc%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

Để có được một ý tưởng của thông điệp (s) bạn đang nhìn thấy/tìm kiếm, tham khảo: http://www.pinvoke.net/default.aspx/Constants/WM.html

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