2
這裏就是我想要做的事:什麼是創建異步服務的正確模式?
public class EmployeeService
{
public void GetEmployeesAsyc(Action<IEnumerable<Employees>> callback)
{
ThreadPool.QueueUserWorkItem(x => {
var employees = //...fetch employees ...//
callback(employees);
});
}
}
public class ViewModel
{
private EmployeeService _employeeService;
private bool _isLoaded;
public ViewModel()
{
_employeeService = new EmployeeService();
EmployeeList = new ObservableCollection<Employee>();
}
public ObservableCollection<Employee> EmployeeList { get; set; }
public void LoadData()
{
if(_isLoaded) return;
_employeeService.GetEmployeesAsync(employees =>
{
EmployeeList.Clear();
employees.ForEach(employee => EmployeeList.Add(employee));
});
_isLoaded = true;
}
}
public partial class View : PhoneApplicationPage
{
private ViewModel _vm;
public View()
{
InitializeComponent();
_vm = new ViewModel();
this.Loaded += (sender, e) => _vm.LoadData();
}
}
這裏的問題是,這將引發一個跨線程異常:
_employeeService.GetEmployeesAsync(employees =>
{
EmployeeList.Clear();
employees.ForEach(employee => EmployeeList.Add(employee));
});
我可以通過包裝它像這樣解決這個問題:
_employeeService.GetEmployeesAsync(employees =>
{
Dispatcher.BeginInvoke(() =>
{
EmployeeList.Clear();
employees.ForEach(employee => EmployeeList.Add(employee));
});
});
但我不確定這是否正確。有什麼建議麼?