Tôi cần biết liệu các cuộc gọi Control.BeginInvoke và Control.Invoke sẽ thực hiện theo thứ tự chúng được gọi.Sẽ có nhiều Control.BeginInvoke/Gọi các cuộc gọi được thực hiện theo thứ tự?
Tôi có các tình huống sau:
- UI thread chặn
- WCF chủ đề kêu gọi Control.BeginInvoke
- WCF chủ đề kêu gọi Control.Invoke (hoặc có thể BeginInvoke một lần nữa)
- UI thread đã bỏ chặn
- ??
Thứ tự thực hiện của bước 1-4 được đảm bảo theo thứ tự được hiển thị (về mặt kỹ thuật, thứ tự không được bảo đảm theo cách đó, nhưng câu hỏi tôi có chỉ liên quan nếu đơn hàng được hiển thị).
Câu hỏi tôi có là liệu có bất kỳ cơ hội nào mà lệnh Gọi/GọiInInoke ở bước 3 được thực hiện trước lệnh gọi BeginInvoke ở bước 2 không?
Ngoài ra, vui lòng không nhận xét về việc chặn chuỗi giao diện người dùng.
Vì vậy, nhận xét nói rằng các cuộc gọi Invoke đồng bộ có thể được thực hiện trước khi cuộc gọi BeginInvoke không đồng bộ không áp dụng cho Control.BeginInvoke, nhưng nó sẽ áp dụng cho Delegate.BeginInvoke? Bạn có thể cung cấp cho tôi liên kết giải thích điều này không? – cornergraf
Tuyên bố của bạn là chính xác. Tôi đã thêm một lời giải thích ngắn gọn về máy bơm tin nhắn UI trong câu trả lời, thật lạ lùng là tôi không thể tìm thấy nguồn chính thức nói rõ nó. –
Ok, cảm ơn. Tôi biết về MessagePump nói chung, nhưng tôi nghĩ rằng BeginInvoke/Invoke cuộc gọi có khả năng có thể có hành vi đặc biệt vì lý do gì và tôi muốn chắc chắn – cornergraf