车厢

隔离舱类型

有几种不同类型的隔间。 有一个全局隔离舱,每个线程管理器、文档管理器和上下文都可以包含一个隔离舱。

全局隔离舱使客户端能够跨进程共享数据。 若要获取全局隔离舱管理器,请调用 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 来枚举隔离舱。 此方法提供包含所有已安装隔离舱的 GUID 的 IEnumGUID 对象。

使用隔离舱 GUID, ITfCompartmentMgr::GetCompartment 用于获取特定的隔离舱。 此方法为调用方提供一个 ITfCompartment 对象,该对象可以获取和设置隔离舱数据。

接收隔离舱更改通知

当隔离舱的值发生更改时,TSF 管理器会通知任何已安装的接收器该隔离舱已更改。 若要安装隔离舱更改建议接收器,请创建实现 ITfCompartmentEventSink 的对象。 然后在要监视的隔离舱对象上使用IID_ITfSource调用 ITfCompartment::QueryInterface ,以获取 ITfSource 接口。 现在,使用IID_ITfCompartmentEventSink和指向 ITfCompartmentEventSink 对象的指针调用 ITfSource::AdviseSink。 当隔离舱的值更改时,使用隔离舱的 GUID 调用建议接收器的 ITfCompartmentEventSink::OnChange 。 建议接收器可以调用 ITfCompartment::GetValue 来获取新值。

ITfCompartmentMgr

ITfCompartment

ITfCompartmentEventSink

TfClientId

ITfThreadMgr::GetGlobalCompartment

ITfCompartmentMgr::GetCompartment

ITfCompartment::SetValue

ITfCompartmentMgr::ClearCompartment

ITfCompartmentMgr::EnumCompartments

ITfSource

ITfSource::AdviseSink

ITfCompartmentEventSink::OnChange