2011-09-13 7 views
6

Tôi đang cố gắng tìm ra cách tôi có thể sử dụng bộ công cụ ánh sáng DispatcherHelperftom MVVM trong SL, nhưng tôi không thể tìm thấy bất kỳ ví dụ nào.Ví dụ đơn giản về DispatcherHelper

Từ trang chủ của khuôn khổ này tôi biết rằng

lớp DispatcherHelper, một lớp nhẹ giúp bạn tạo ứng dụng đa luồng.

Nhưng tôi không biết cách sử dụng.

Làm cách nào và cho những gì tôi có thể sử dụng?

Trả lời

17

Bạn chỉ cần DispatcherHelper khi yo muốn thực hiện thay đổi đối với các thành phần trên chuỗi giao diện người dùng của bạn, từ mã chạy trên một chuỗi khác. Ví dụ. trong một ứng dụng Silverlight bạn gọi một dịch vụ web để lấy một số dữ liệu một cách không đồng bộ, và bây giờ muốn thông báo cho Ui rằng dữ liệu có mặt qua một sự kiện OnNotifyPropertyChanged.

Trước tiên, bạn phải khởi tạo DispatcherHelper. Trong Silverlight bạn làm điều này trong Application_Startup:

//initialize Dispatch helper 
private void Application_Startup(object sender, StartupEventArgs e) { 
    RootVisual = new MainPage(); 
    DispatcherHelper.Initialize(); 
} 

trong WPF việc khởi tạo được thực hiện trong constructor tĩnh của bạn App lớp:

static App() { 
    DispatcherHelper.Initialize(); 
} 

Sau đó, trong trường hợp của bạn, xử lý việc hoàn thành cuộc gọi asnc của bạn, sử dụng đoạn mã sau để gọi RaisePropertyChanged trên thread UI:

DispatcherHelper.CheckBeginInvokeOnUI(
    () => RaisePropertyChanged(PowerStatePropertyName) 
); 

DispatcherHelper.BeginInvokeOnUl hy vọng một Action nên y Bạn có thể sử dụng bất kỳ mã nào ở đây chỉ cần sử dụng

DispatcherHelper.CheckBeginInvokeOnUI(
    () => { /* complex code goes in here */ } 
); 

để thực hiện các tác vụ phức tạp hơn.