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