Когда завершается событие loadoperation? - PullRequest
0 голосов
/ 20 июня 2011

Класс DomainContext имеет метод Invoke, который возвращает экземпляр InvokeOperation и часто мы видим следующий код

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

Моя первая мысль - это не должно работать: ведь событие может возникнуть раньше, чем мы на него подпишемся.

Я провел эксперимент

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

Но я обнаружил, что этот код работает правильно, но как? Вы можете мне это объяснить?

А какой шаблон использует эта конструкция?

Ответы [ 2 ]

1 голос
/ 20 июня 2011

Трудно понять, не видя никакого кода для DomainContext - но похоже, что код, который добавляет обработчик для события Completed, немедленно вызывает обработчик, если операция уже завершена.

Если у вас есть код для InvokeOperation, я бы определенно посмотрел на объявление события Completed, чтобы обнаружить "магию".

0 голосов
/ 21 июня 2011

Предположим, вы говорите о WCF RIA Services SDK, Джон прав. InvokeOperation имеет свойство IsComplete. Часть add события Completed проверяет это свойство. В случае завершенной операции он не добавляет переданный обработчик событий, а вызывает его немедленно.

Это можно проверить, проверив OperationBase (базовый класс InvokeOperation) в System.ServiceModel.DomainServices.Client.dll с помощью инструмента дизассемблера, такого как dotPeek.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...