Udostępnij przez


Powiązanie asynchroniczne i synchroniczne

Klient może sprawdzić, czy moniker jest asynchroniczny, wywołując funkcję IsAsyncMoniker. Jeśli klient zwraca flagę BINDF_ASYNCHRONOUS, to zamiast zwracać wskaźnik obiektu lub wskaźnik magazynu z kolejnych wywołań do IMoniker::BindToStorage lub IMoniker::BindToObject, moniker zwraca MK_S_ASYNCHRONOUS zamiast wskaźnika obiektu i NULL zamiast wskaźnika magazynu. W odpowiedzi klient powinien poczekać na odebranie żądanego obiektu lub magazynu podczas implementacji IBindStatusCallback::OnDataAvailable i IBindStatusCallBack::OnObjectAvailable.

Obiekt wywołania zwrotnego otrzymuje również powiadomienia o postępie za pomocą IBindStatusCallback::OnProgress, powiadomienia o dostępności danych za pośrednictwem OnDataAvailableoraz różne inne powiadomienia od monikera o stanie operacji powiązania.

Jeśli klient nie zwróci flagi BINDF_ASYNCHRONOUS z wywołania monikera do IBindStatusCallback::GetBindInfo, operacja powiązania będzie przeprowadzana synchronicznie, a obiekt lub magazyn zostanie zwrócony z kolejnych wywołań do BindToObject lub BindToStorage. Podobnie, jeśli klient chce wykonać operację synchronicznie i nie chce otrzymywać żadnych powiadomień o postępie lub wywołań zwrotnych, może zażądać monikera asynchronicznego, który zachowuje się synchronicznie, nie implementując IBindStatusCallback. W takich przypadkach asynchroniczny znacznik będzie działał jak standardowy synchroniczny znacznik.

Asynchroniczne Monikery