异步和同步绑定
客户端可以通过调用 IsAsyncMoniker 函数来检查名字对象是否异步。 如果客户端返回 BINDF_ASYNCHRONOUS 标记,那么在随后调用 IMoniker::BindToStorage 或 IMoniker::BindToObject 时,名字对象将不会返回对象指针或存储指针,而是返回 MK_S_ASYNCHRONOUS 以代替对象指针,并返回 NULL 以代替存储指针。 作为响应,客户端应在执行 IBindStatusCallback::OnDataAvailable 和 IBindStatusCallBack::OnObjectAvailable 时等待接收请求的对象或存储。
回调对象还会通过 IBindStatusCallback::OnProgress 接收进度通知,通过 OnDataAvailable 接收数据可用性通知,以及来自名字对象的有关绑定操作状态的各种其他通知。
如果客户端未从名字对象对 IBindStatusCallback::GetBindInfo 的调用中返回 BINDF_ASYNCHRONOUS 标志,则绑定操作将同步继续,并且所需的对象或存储将从对 BindToObject 或 BindToStorage 的后续调用中返回。 同样,如果客户端需要同步操作,但不希望接收任何进度通知或回调,则它可以通过不实现 IBindStatusCallback 来请求异步名字对象以保持同步行为。 在这种情况下,异步名字对象的行为类似于标准同步名字对象。
相关主题