Что я придумал:
Индикатор занятости из расширенного набора инструментов WPF:
<extoolkit:BusyIndicator IsBusy="{Binding IsBusy}" BusyContent="Loading data..." >
В моей модели представления базового класса я добавил следующий метод:
protected void ExecuteBackgroundProcess(Action action)
{
IsBusy = true;
Task task = Task.Factory.StartNew(() => action()).ContinueWith((s) => this.IsBusy = false);
}
Когда я хочу загрузить коллекцию с сервера, я могу позвонить из модели производного представления:
this.ExecuteBackgroundProcess(() =>
{
var collection = _securityRepo.TakeOfType<Security>(10).ToObservableCollection();
DispatcherHelper.CheckBeginInvokeOnUI(() =>
{
Securities = collection;
RaisePropertyChanged("Securities");
});
});
Существует также более надежное и полное решение для CodeProject:
http://www.codeproject.com/KB/WPF/ThreadingComponent.aspx?msg=3319891