Asynchrone und synchrone Bindung

Der Client überprüft möglicherweise, ob der Moniker asynchron ist, indem er die IsAsyncMoniker-Funktion aufruft. Wenn der Client das BINDF_ASYNCHRONOUS-Flag zurückgibt, anstatt einen Objektzeiger oder einen Speicherzeiger aus nachfolgenden Aufrufen von IMoniker::BindToStorage oder IMoniker::BindToObject zurückzugeben, gibt der Moniker MK_S_ASYNCHRONOUS anstelle des Objektzeigers und NULL anstelle des Speicherzeigers zurück. Als Reaktion sollte der Client warten, bis das angeforderte Objekt oder Speicher während der Implementierung von IBindStatusCallback::OnDataAvailable und IBindStatusCallBack::OnObjectAvailable empfangen wird.

Das Rückrufobjekt empfängt auch Statusbenachrichtigungen über IBindStatusCallback::OnProgress, Datenverfügbarkeitsbenachrichtigung über OnDataAvailable und verschiedene andere Benachrichtigungen des Monikers über die status des Bindungsvorgangs.

Wenn der Client das BINDF_ASYNCHRONOUS Flag aus dem Aufruf des Monikers an IBindStatusCallback::GetBindInfo nicht zurückgibt, wird der Bindungsvorgang synchron fortgesetzt, und das gewünschte Objekt oder Speicher wird von nachfolgenden Aufrufen von BindToObject oder BindToStorage zurückgegeben. Wenn der Client einen synchronen Betrieb wünscht und keine Statusbenachrichtigungen oder Rückrufe empfangen möchte, kann er einen asynchronen Moniker anfordern, um sich synchron zu verhalten, indem er IBindStatusCallback nicht implementiert. In solchen Fällen verhält sich der asynchrone Moniker wie ein synchroner Standardmoniker.

Asynchrone Moniker