类DomainContext
有方法Invoke,它返回InvokeOperation
的实例
我们经常可以看到下一个代码
InvokeOperation op = domainConextInstance.Invoke(...);
op.Completed +={...};
我的第一个想法 - 它应该不起作用:毕竟事件可能早于我们订阅它。
我做了一个实验
InvokeOperation op = domainConextInstance.Invoke(...);
Thread.Sleep(5000); //or 25000
op.Completed +={...};
但是我发现这段代码工作正常,但是怎么样? 你能解释一下吗?
这个构造使用什么模式?
答案 0 :(得分:1)
如果没有看到DomainContext
的任何代码,很难知道 - 但是如果操作已经完成,那么为Completed
事件添加处理程序的代码就会立即调用处理程序。 / p>
假设您拥有InvokeOperation
的代码,我肯定会查看Completed
事件的声明以发现“魔法”。
答案 1 :(得分:0)
假设您正在谈论WCF RIA Services SDK,Jon是对的。 InvokeOperation具有属性IsComplete
。 Completed事件的add
部分检查此属性。如果已完成操作,则不会添加传递的事件处理程序,而是立即调用它。
您可以通过使用像dotPeek这样的反汇编工具检查System.ServiceModel.DomainServices.Client.dll中的OperationBase(InvokeOperation的基类)来验证这一点。