文档锁
文档锁定协议
若要请求基于 ACP 的应用程序的文档锁,TSF 管理器调用 ITextStoreACP::RequestLock。 对于基于定位点的应用程序,TSF 管理器调用 ITextStoreAnchor::RequestLock。 应用程序通过在 RequestLock内调用 ITextStoreACPSink::OnLockGranted(基于 ACP 的应用程序)或 ITextStoreAnchorSink::OnLockGranted(基于定位点的应用程序)来授予文档锁定。 锁仅在 onLockGranted 调用期间有效。 OnLockGranted 返回时,文档被视为已解锁。
文档锁的类型
有两种类型的文档锁,只读和读/写。 只读锁使管理器能够读取文本,但无法修改或插入文本。 读/写锁使管理器能够读取、修改和插入文本。 通过在 dwFlags中指定TS_LF_READ来请求只读锁。 通过在 dwFlags 中指定TS_LF_READWRITE来请求读/写锁。
异步和同步请求
锁请求可以是同步请求,也可以是异步请求。 管理器使用 dwFlags中的TS_LF_SYNC标志请求同步锁。 如果此标志不存在,则请求是异步的。
授予锁定
调用 RequestLock 时,应用程序必须确定文档当前是否已锁定。 如果文档未锁定,并且不存在拒绝锁定的其他原因,应用程序应将 phrSession 设置为S_OK并返回S_OK。
如果文档已锁定且锁定请求同步,则应用程序应将 phrSession 设置为TS_E_SYNCHRONOUS并返回S_OK。 这表示无法授予同步请求。
如果文档已锁定且锁定请求是异步的,则应用程序应将请求排在队列中,将 phrSession 设置为TS_S_ASYNC并返回S_OK。 当文档可用时,应用程序应从队列中删除请求,并调用 OnLockGranted。 锁定请求的此队列是可选的;应用程序必须支持一种方案。 如果文档具有只读锁,则新锁请求是可读/写的,并且请求是异步的,则应用程序已调用 OnLockGranted,这导致了对 RequestLock的重新进入调用。 应用程序应将 phrSession 设置为TS_S_ASYNC并返回S_OK。 调用 OnLockGranted 返回后,应用程序应通过再次调用 OnLockGranted 并使用 TS_LF_READWRITE来处理升级请求。
锁定强制
应用程序必须确保在允许访问文档之前存在正确的锁类型。 例如,应用程序应在允许 ITextStoreACP::GetText 或 ITextStoreAnchor::GetText 继续之前,验证文档是否至少具有只读锁。 如果不存在正确的锁,应用程序应返回TF_E_NOLOCK。
相关主题