2009-09-01 32 views

Trả lời

14

này về cơ bản mô tả một cách để thúc đẩy công việc giữa các chủ đề; để đẩy một mục công việc lên chủ đề khác, hãy sử dụng Invoke (đồng bộ) hoặc BeginInvoke (không đồng bộ - lý tưởng gọi EndInvoke sau). Tương tự, InvokeRequired được sử dụng để hỏi "tôi có cần phải làm điều này không? Hoặc tôi có thể tự mình thực hiện công việc không?".

Cách sử dụng phổ biến nhất của giao diện này là ở dạng cửa sổ, trong đó nó là một phần của cách đẩy công việc lên luồng giao diện người dùng; tất nhiên bạn có thể sử dụng Control.Invoke/Control.BeginInvoke, nhưng các điều khiển biểu mẫu triển khai giao diện này để cho phép trừu tượng - vì vậy mã hạ lưu không cần phải tự buộc vào các biểu mẫu cửa sổ. Trong trường hợp biểu mẫu, InvokeRequired có nghĩa là "Tôi có phải là chuỗi giao diện người dùng không?".

Trong thực tế, tôi không chắc nó là phổ biến để sử dụng nó trực tiếp. Nó phổ biến hơn để xử lý các sự kiện trên giao diện người dùng và có giao diện người dùng xử lý chuyển đổi luồng bằng cách sử dụng cơ chế cục bộ thích hợp nhất.

sử dụng tiêu biểu:

obj.Invoke((MethodInvoker) SomeMethod); 

mà thực hiện (thông qua một đại biểu) SomeMethod trên thread bởi obj quản lý (mà thực hiện giao diện).

+0

cảm ơn marc một câu trả lời tuyệt vời của nó .. –

+0

Gần đây tôi đã xem một triển khai rất dễ dàng của 'ISynchronizeInvoke' kèm theo một quá trình triển khai' IAsyncResult' rất đơn giản: http://gurkashi.blogspot.com/2011/01/hi-all- in-this-post-i-will-prove.html. Không phải để hi-jack câu hỏi, nhưng tôi tự hỏi nếu, bây giờ, với. Net 4,5 Tôi có thể sử dụng async/await thay vì mô hình trường học cũ của BeginInvoke với callbacks. Mặc dù giao diện nói 'BeginInvoke', * dưới mui xe * Tôi có thể thực hiện từ hộp công cụ 4.5 của tôi. – IAbstract

2

ISynchronizeInvoke Interface

Giao diện ISynchronizeInvoke cung cấp đồng bộ và không đồng bộ thông tin liên lạc giữa các đối tượng về sự xuất hiện của một sự kiện. Đối tượng triển khai giao diện này có thể nhận được thông báo rằng sự kiện đã xảy ra và họ có thể phản hồi các yêu cầu về sự kiện này. Bằng cách này, khách hàng có thể đảm bảo rằng một yêu cầu đã được xử lý trước khi họ gửi yêu cầu tiếp theo phụ thuộc vào việc hoàn thành khoản tiền đầu tiên là .

Cũng tham khảo

http://blogs.msdn.com/jaredpar/archive/2008/01/07/isynchronizeinvoke-now.aspx

+0

Yap..i nghĩ rằng điều này có thể được sử dụng để cập nhật giao diện người dùng trong chuỗi chính bằng cách sử dụng Chủ đề nền của logic cấp thấp hơn? –

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