Trong Silverlight 4 tôi có một lớp dịch vụ tùy chỉnh có sự kiện hoàn thành không đồng bộ. Bên trong sự kiện hoàn thành Tôi lấy dữ liệu trả về và gọi một phương pháp populate qua một cái gì đó như thế này:Dispatcher.Invoke với các tác phẩm đại biểu ẩn danh trong Silverlight nhưng không WPF
private void service_Completed(object sender, CompletedEventArgs args)
{
Dispatcher.BeginInvoke(() => populateInbox(args.Jobs));
}
private void populateInbox(List<JobViewModel> jobs)
{
inbox.DataContext = jobs;
}
Các BeginInvoke
công trình trong SL4, tuy nhiên khi tôi chuyển nó vào WPF tôi nhận được lỗi sau:
Cannot convert lambda expression to type 'System.Delegate' because it is not a delegate type
tôi đã cố gắng thay đổi nó vào một nội dòng, mang tính chất đại biểu paramaterized:
Dispatcher.BeginInvoke(delegate(List<JobViewModel> jobs)
{
inbox.DataContext = jobs;
});
Tuy nhiên, đó mang lại cùng một lỗi thời gian biên dịch.
Bất kỳ ý tưởng làm thế nào để có được điều này để làm việc trong WPF? Việc tái cấu trúc để sử dụng số BackgroundWorker
không phải là một lựa chọn cho tôi.
Tôi nhận được lỗi này ngay bây giờ: Một tham chiếu đối tượng là cần thiết cho không tĩnh lĩnh vực, phương pháp, hoặc tài sản 'System.Windows.Threading.Dispatcher.BeginInvoke (System.Delegate, params object []) '. Tôi tách nó ra thành 2 dòng để thử và xem điều gì gây ra lỗi. var d = new Action (() => populateInbox (args.Jobs)); Dispatcher.BeginInvoke (d, args.Jobs); Lỗi xảy ra trên dòng thứ hai. –
Dispatcher.BeginInvoke (d, đối tượng mới [] {args.Jobs}); Không hoạt động. –
@Edward: 'Dispatcher' không phải là một lớp tĩnh. Bạn sẽ phải gọi hàm này trong ngữ cảnh của một phần tử giao diện người dùng có thuộc tính 'Dispatcher' hoặc bạn sẽ phải chuyển giao trong bộ điều phối làm đối số khác. –