Réponse courte: Vous pouvez le faire si vous n'êtes pas sur le fil Dispatcher, quelque chose comme:
System.Threading.ThreadPool.QueueUserWorkItem(state =>
{
IAsyncResult asyncResult = svc.BeginSomething(null, null);
if (!asyncResult.CompletedSynchronously)
{
asyncResult.AsyncWaitHandle.WaitOne();
}
try
{
svc.EndSomething(asyncResult);
}
catch
{
throw;
}
finally
{
asyncResult.AsyncWaitHandle.Close();
}
});
Le grand avantage est que vous pouvez garder votre couche de modèle de domaine synchroniquement comme dans les vieux jours , vous pouvez implémenter facilement le chargement paresseux etc ...
Mais en pratique, vous ne pouvez l'utiliser lorsque vous concevez votre application à respecter strictement les MVVM/commandants motifs, où vous r ViewModels et Commands gèrent la commutation entre le thread du répartiteur et les threads du modèle. Il y a beaucoup de travail à faire, et il y a des pièges, mais quand ça marche, ça marche à merveille.
Si vous souhaitez utiliser un framework prêt à l'emploi qui fonctionne de manière similaire, il est disponible ici: CodeProject: Introducing the Model Thread View Thread Pattern. L'architecture est très bien expliquée aussi sur cette page.