loadoperation何时完成事件火灾?

时间:2011-06-20 14:15:41

标签: c# events

DomainContext有方法Invoke,它返回InvokeOperation的实例 我们经常可以看到下一个代码

InvokeOperation op = domainConextInstance.Invoke(...);
op.Completed +={...};

我的第一个想法 - 它应该不起作用:毕竟事件可能早于我们订阅它。

我做了一个实验

InvokeOperation op = domainConextInstance.Invoke(...);
Thread.Sleep(5000); //or 25000
op.Completed +={...};

但是我发现这段代码工作正常,但是怎么样? 你能解释一下吗?

这个构造使用什么模式?

2 个答案:

答案 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的基类)来验证这一点。