非同期バインディングと同期バインディング
クライアントは、IsAsyncMoniker関数を呼び出すことによって、モニカーが非同期であるかどうかを確認できます。 クライアントが、IMoniker::BindToStorageまたはIMoniker::BindToObjectへの後続の呼び出しからオブジェクトポインターまたはストレージポインターを返すのではなく、BINDF_ASYNCHRONOUSフラグを返す場合、モニカーはオブジェクトポインターの代わりにMK_S_ASYNCHRONOUSを返し、ストレージポインターの代わりにNULLを返します。 応答として、クライアントは、IBindStatusCallback :: OnDataAvailableとIBindStatusCallBack :: OnObjectAvailableの実装中に、要求されたオブジェクトまたはストレージを受け取るまで待機する必要があります。
また、コールバックオブジェクトは、IBindStatusCallback :: OnProgressを介した進行状況通知、OnDataAvailableを介したデータ可用性通知、およびバインド操作の状態に関するモニカーからのその他のさまざまな通知を受け取ります。
クライアントがモニカーのIBindStatusCallback :: GetBindInfoへの呼び出しからBINDF_ASYNCHRONOUSフラグを返さない場合、バインド操作は同期的に進行し、目的のオブジェクトまたはストレージはBindToObjectまたはBindToStorageへの後続の呼び出しから返されます。 同様に、クライアントが同期操作を必要とし、進行状況の通知またはコールバックを受信したくない場合は、IBindStatusCallbackを実装しないことによって同期的に動作する非同期モニカーを要求できます。 このような場合、非同期モニカーは標準の同期モニカーのように動作します。
関連トピック