2010-11-16 15 views

Répondre

3

Question complexe.
Toutes les déclarations de méthode BeginInvoke pour les délégués ressemble

[MethodImpl(0, MethodCodeType=MethodCodeType.Runtime)] 
public virtual IAsyncResult BeginInvoke(...some params...); 

partie la plus importante ici est MethodCodeType.Runtime. Il

Indique que l'implémentation de la méthode est fournie par le moteur d'exécution.

Plus d'informations sur l'implémentation à l'exécution, vous pouvez lire this pretty old but still actual article.

Silverlight est un framework multi-plateforme. Il devrait donc implémenter son propre mécanisme indépendant (c'est-à-dire géré) de plate-forme d'exécution asynchrone (threading et dispatching). C'est donc l'histoire de la classe Deployment.Current.Dispatcher gérée et de sa méthode BeginInvoke qui pourrait être appelée depuis Silverlight. BTW les classes Dispatcher et DispatcherOperation sont toutes deux compatibles CLS, ce qui garantit qu'elles fonctionnent à différentes implémentations CLI. Donc, la réponse courte à la question

pourquoi Delegate.BeginInvoke n'est pas pris en charge sur Silverlight?

est parce qu'il est temps de créer des applications de la plate-forme vraiment croix :)

+0

Grande réponse. Merci! – citizenmatt