Tôi đang tìm cách thực hành tốt nhất để giao tiếp không đồng bộ giữa các lớp. Tôi đang sử dụng mvvm light toolkitnhững gì là không đồng bộ trong MVVM? Mô hình hoặc ViewModel. Thực hành tốt nhất?
hiện tại tôi đang sử dụng một nền tảng trong mô hình vì tôi thấy điều này trong mã được tạo tự động. Không phải với nhân viên nền mà là cuộc gọi không đồng bộ.
public void GetConfig(Action<Config, Exception> callback)
{
BackgroundWorker backgroundWorker = new BackgroundWorker();
backgroundWorker.DoWork += (backgroundWorkerSender, backgroundWorkerArgs) =>
{
try
{
backgroundWorkerArgs.Result = AppEnvironment.Instance.Config;
}
catch (Exception exception)
{
backgroundWorkerArgs.Result = null;
}
};
backgroundWorker.RunWorkerCompleted += (backgroundWorkerSender, backgroundWorkerArgs) =>
{
if (backgroundWorkerArgs.Result != null)
{
callback((Config) backgroundWorkerArgs.Result, null);
}
else
{
/* ToDo: exceptionhandling */
}
};
backgroundWorker.RunWorkerAsync();
}
Bây giờ tôi đã tìm thấy AsyncDelegateCommand thực hiện phần không đồng bộ trong ViewModel.
private ICommand _refreshObjectDefinitionCommand;
public ICommand RefreshObjectDefinitionCommand
{
get
{
return _refreshObjectDefinitionCommand
?? (_refreshObjectDefinitionCommand = new AsyncDelegateCommand(delegate
{
IsBusy = true;
_dataService.GetObjectDefinition(
(xmlObjectDef, errorConfig) =>
{
if (errorConfig != null)
{
/* ToDo Lenz: exceptionhandling */
return;
}
ObjectDefinition = xmlObjectDef;
});
_dataService.GetObjectDefinitionTreeView(
(treenodes, errorConfig) =>
{
if (errorConfig != null)
{
/* ToDo Lenz: exceptionhandling */
return;
}
TreeNodes = treenodes;
});
},
() => _isConnected, o => IsBusy = false, exception => IsBusy = false));
}
}
Tôi hơi bối rối về thực tiễn tốt nhất? Tôi đã đọc rất nhiều bài báo. Nhưng bằng cách nào đó họ luôn là những ý kiến khác nhau. Có bất kỳ điều khoản nào cho khả năng tương thích tốt nhất theo nỗ lực bình thường để duy trì không?
Một số thực phẩm cho các tư tưởng
mẫu:
http://csharperimage.jeremylikness.com/2009/12/simplifying-asynchronous-calls-in.html
http://www.dzone.com/articles/mvvmlight-and-async
ViewModel
http://www.codeproject.com/Articles/123183/Asynchronus-MVVM-Stop-the-Dreaded-Dead-GUI-Problem
http://www.codeproject.com/Articles/441752/Async-MVVM-Modern-UI
Sẽ không phải là cách nhiệm vụ dễ đọc hơn? Với async/await .. – JustAnotherUserYouMayKnow
tất nhiên, nhưng theo như tôi biết nó chỉ là kể từ .net 4.5 có sẵn?!? –
Có một gói NuGet để hỗ trợ nó cho 4.0 và silverlight 5. Cài đặt nó vào dự án của bạn và nó hoạt động giống như một sự quyến rũ! http://nuget.org/packages/Microsoft.CompilerServices.AsyncTargetingPack/ – JustAnotherUserYouMayKnow