Поделиться через


Асинхронная и синхронная привязка

Клиент может проверка, чтобы узнать, является ли моникер асинхронным путем вызова функции IsAsyncMoniker. Если клиент возвращает флаг BINDF_ASYNCHRONOUS, а не возвращает указатель объекта или указатель хранилища из последующих вызовов IMoniker::BindTo служба хранилища или IMoniker::BindToObject, моникер возвращает MK_S_ASYNCHRONOUS вместо указателя объекта и NULL вместо указателя хранилища. В ответ клиент должен ожидать получения запрошенного объекта или хранилища во время реализации IBindStatusCallback::OnDataAvailable и IBindStatusCallBack::OnObjectAvailable.

Объект обратного вызова также получает уведомление о ходе выполнения через IBindStatusCallback::OnProgress, уведомление о доступности данных через OnDataAvailable и различные другие уведомления от моникера о состоянии операции привязки.

Если клиент не возвращает флаг BINDF_ASYNCHRONOUS из вызова моникера к IBindStatusCallback::GetBindInfo, операция привязки будет выполняться синхронно, и требуемый объект или хранилище будет возвращено из последующих вызовов BindToObject или BindTo служба хранилища. Аналогичным образом, если клиент хочет синхронной операции и не хочет получать уведомления о ходе выполнения или обратных вызовов, он может запросить асинхронный моникер вести себя синхронно, не реализуя IBindStatusCallback. В таких случаях асинхронный моникер будет вести себя как стандартный синхронный моникер.

Асинхронные моникеры