2011-09-26 9 views
7

Tôi biết Dispatcher.BeginInvoke() được sử dụng để thực hiện một số đoạn mã trong luồng giao diện người dùng. Tôi nhận thấy rằng có là một cách khác để có được cá thể Dispatcher bằng cách sử dụng lớp 'Deployment'. Tôi muốn biếtSự khác biệt giữa phương thức này.Dispatcher.BeginInvoke() và Deployment.Current.Dispatcher.BeginInvoke() trong Silverlight

Có diffrence giữa invokation của this.Dispatcher.BeginInvoke()Deployment.Current.Dispatcher.BeginInvoke() chức năng?, Và

khi tôi nên sử dụng this.Dispatcher.BeginInvoke()Deployment.Current.Dispatcher.BeginInvoke()?

Cảm ơn Alex

Trả lời

11

Câu trả lời ngắn: Họ đều giống nhau trong Silverlight, vì vậy sử dụng một ngắn hơn (nếu có trong bối cảnh của mã của bạn).

this.Dispatcher.BeginInvoke() đảm bảo nó chạy trên luồng mà kiểm soát được đề cập đang chạy dưới.

Deployment.Current.Dispatcher.BeginInvoke() đảm bảo nó được chạy trên chuỗi giao diện người dùng chính.

Cả hai luôn giống nhau trong Silverlight (và thường giống nhau trong WPF, trừ khi bạn đã tạo thêm chuỗi giao diện người dùng).

Sử dụng this.Dispatcher.BeginInvoke() trừ khi ngữ cảnh hiện tại của bạn không có điều phối, sau đó sử dụng ngữ cảnh chung thay thế.

+0

Trong hoàn cảnh nào thì chúng không giống nhau? – AnthonyWJones

+0

@AnthonyWJones: Dispatcher.Current truy xuất đối tượng công văn được liên kết với chuỗi đang thực thi mã. Vì vậy, chúng không giống nhau khi được gọi trên các chủ đề khác nhau. – Will

+0

@Will: Ý của bạn là Deployment.Current hoặc Dispatcher.Current? – wizzardz