车厢
隔离舱类型
有几种不同类型的隔间。 有一个全局隔离舱,每个线程管理器、文档管理器和上下文可以包含一个隔离舱。
全局隔离舱使客户端能够跨进程共享数据。 若要获取全局隔离舱管理器,请调用 ITfThreadMgr::GetGlobalCompartment。
线程管理器包含一个隔离舱管理器,该管理器包含每个线程的隔离舱。 这样就可以在线程内共享数据。 若要获取线程管理器隔离舱管理器,请使用 IID_ITfCompartmentMgr 调用 ITfThreadMgr::QueryInterface。
创建的每个文档管理器还包含一个隔离舱管理器。 这样,数据就可以在特定文档管理器中共享。 若要获取文档管理器隔离舱管理器,请使用IID_ITfCompartmentMgr调用 ITfDocumentMgr::QueryInterface。
创建的每个上下文还包含一个隔离舱管理器。 这样就可以在特定上下文中共享数据。 若要获取上下文隔离舱管理器,请使用 IID_ITfCompartmentMgr 调用 ITfContext::QueryInterface。
创建和删除隔离舱
首次使用隔舱 GUID 调用 ITfCompartmentMgr::GetCompartment 时,会创建一个隔离舱。 安装客户端应使用 ITfCompartment::SetValue设置隔离舱的初始值。 在设置值之前,隔离舱值为空。 因此,在调用 getCompartment 之前,无法验证隔离舱是否存在。 为了避免这种情况,安装客户端应将该值设置为一些初始值,以便其他客户端可以确定隔离舱是否已存在。
ITfCompartmentMgr::ClearCompartment 方法用于删除隔离舱。 对隔离舱的任何现有引用都标记为无效。
获取隔间
使用 ITfCompartmentMgr 接口,客户端可以通过调用 ITfCompartmentMgr::EnumCompartments来枚举隔离区。 此方法提供一个 IEnumGUID 对象,该对象包含所有已安装隔离舱的 GUID。
使用隔离舱 GUID,ITfCompartmentMgr::GetCompartment 用于获取特定隔舱。 此方法为调用方提供 ITfCompartment 对象,该对象可以获取和设置隔离舱数据。
接收隔离舱更改通知
当隔离舱的值发生更改时,TSF 管理器会通知任何已安装的建议接收器,该隔离舱已更改。 若要安装隔离舱更改建议接收器,请创建实现 ITfCompartmentEventSink的对象。 然后调用 ITfCompartment::QueryInterface,并在隔离舱对象上使用IID_ITfSource进行监视,以获取 ITfSource 接口。 现在,使用 IID_ITfCompartmentEventSink 和指向 ITfCompartmentEventSink 对象的指针调用 ITfSource::AdviseSink。 当隔离舱的值发生变化时,建议接收器的 ITfCompartmentEventSink::OnChange 使用隔离舱的 GUID 调用。 建议接收器可以调用 ITfCompartment::GetValue 以获取新值。
相关主题