MSDN docs状态:
在Silverlight中,在所有委托类型上自动定义的BeginInvoke方法总是抛出NotSupportedException,因此您不能使用它在线程池线程上进行异步方法调用。
但不说明原因。
有人有想法吗?
答案 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支持吗?
因为是时候创建真正的跨平台应用程序了:)