मैं परतों के बीच एसिंक्रोनस संवाद करने के लिए सबसे अच्छा अभ्यास खोज रहा हूं। मैं उपयोग कर रहा हूँ mvvm light toolkitएमवीवीएम में एसिंक्रोनस क्या है? मॉडल या व्यूमोडेल। सबसे अच्छा अभ्यास?
वर्तमान में मैं मॉडल में एक BackgroundWorker उपयोग करें, क्योंकि मैं स्वत: जनरेट कोड में यह देखा। पृष्ठभूमि कार्यकर्ता के साथ नहीं बल्कि एसिंक कॉल के साथ।
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();
}
अब मैं AsyncDelegateCommand जो 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));
}
}
मैं सबसे अच्छा अभ्यास के बारे में थोड़ा उलझन में हूं? मैंने बहुत सारे लेख पढ़े हैं। लेकिन किसी भी तरह वे हमेशा अलग राय हैं। क्या बनाए रखने के सामान्य प्रयास के तहत सर्वोत्तम संगतता का कोई प्रावधान है?
विचार के लिए कुछ खाना
मॉडल:
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
क्या कार्य-पैटर्न को पढ़ने के लिए आसान तरीका नहीं होगा? Async/await के साथ .. – JustAnotherUserYouMayKnow
बेशक, लेकिन जहां तक मुझे पता है कि यह केवल .NET 4.5 उपलब्ध है?! –
4.0 और Silverlight के लिए इसका समर्थन करने के लिए एक NuGet पैकेज है 5. इसे अपने प्रोजेक्ट में इंस्टॉल करें और यह एक आकर्षण की तरह काम करता है! http://nuget.org/packages/Microsoft.CompilerServices.AsyncTargetingPack/ – JustAnotherUserYouMayKnow