Katmanlar arasında eşzamansız iletişim kurmak için en iyi uygulamayı arıyorum. Ben autogenerated kodunda bu gördüğüm için mvvm light toolkitMVVM'de asenkron nedir? Model veya ViewModel. En iyi uygulama?
anda ben modelinde bir backgroundworker kullanmak kullanıyorum. Backgroundworker ile değil, async çağrısı.
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();
}
Şimdi ViewModel asenkron bölümünü uygulayan
AsyncDelegateCommand bulundu.
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));
}
}
En iyi uygulama hakkında biraz kafam karıştı mı? Çok fazla makale okudum. Fakat bir şekilde her zaman farklı görüşlerdirler. Korumak için normal çabaya göre en iyi uyumluluk için herhangi bir hüküm var mı?
düşünce için bazı gıdaModeli:
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
Görev-deseni okunması daha kolay olmaz mıydı? Async/beklemek ile .. – JustAnotherUserYouMayKnow
tabii, ama bildiğim kadarıyla sadece. Net 4.5 kullanılabilir beri?!? –
4.0 ve silverlight 5 için onu desteklemek için bir NuGet paketi var. Projenize yükleyin ve bir çekicilik gibi çalışır! http://nuget.org/packages/Microsoft.CompilerServices.AsyncTargetingPack/ – JustAnotherUserYouMayKnow