任何人都知道为什么Silverlight不支持Delegate.BeginInvoke?

时间:2010-11-16 08:40:44

标签: silverlight delegates

MSDN docs状态:

  

在Silverlight中,在所有委托类型上自动定义的BeginInvoke方法总是抛出NotSupportedException,因此您不能使用它在线程池线程上进行异步方法调用。

但不说明原因。

有人有想法吗?

1 个答案:

答案 0 :(得分:3)

复杂的问题 委托的所有BeginInvoke方法声明都类似于

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

这里最重要的部分是MethodCodeType.Runtime。它

  

指定方法实现由运行时提供。

有关运行时实现的更多信息,请参阅this pretty old but still actual article

Silverlight是跨平台框架。因此它应该实现自己的平台独立(即托管)异步执行机制(线程和调度)。这就是托管的Deployment.Current.Dispatcher类及其可能从Silverlight调用的BeginInvoke方法的故事。

BTW Dispatcher和DispatcherOperation类都符合CLS,可以保证它们在不同的CLI实现中工作。 所以答案的简短回答

  

为什么Delegate.BeginInvoke不是   Silverlight支持吗?

因为是时候创建真正的跨平台应用程序了:)