RDT_ReadLock 사용법
_VSRDTFLAGS. RDT_ReadLock은 현재 Visual Studio IDE에서 열려 있는 모든 문서의 목록인 RDT(실행 중인 문서 테이블)에서 문서를 잠그는 논리를 제공하는 플래그입니다. 이 플래그는 문서가 열리는 시기와 문서가 사용자 인터페이스에 표시되는지 또는 보이지 않게 메모리에 보관되는지 여부를 결정합니다.
일반적으로 다음 중 하나에 해당하는 경우 _VSRDTFLAGS.RDT_ReadLock을 사용합니다.
문서를 보이지 않게 읽기 전용으로 열려고 하지만 문서를 소유해야 하는 IVsHierarchy가 아직 설정되지 않은 경우.
사용자가 보이지 않게 열린 문서를 UI에 표시한 다음 닫으려고 시도하기 전에 문서를 저장하라는 메시지를 사용자에게 표시하려는 경우.
보이는 문서와 보이지 않는 문서 관리 방법
사용자가 UI에서 문서를 열면 문서의 IVsHierarchy 소유자를 설정하고 _VSRDTFLAGS.RDT_EditLock 플래그를 설정해야 합니다. IVsHierarchy 소유자를 설정할 수 없는 경우 사용자가 모두 저장을 클릭하거나 IDE를 닫을 때 문서가 저장되지 않습니다. 즉, 문서가 메모리에서 수정된 위치에 보이지 않게 열려 있고 사용자에게 종료 시 또는 모두 저장을 선택하면 문서를 저장하라는 메시지가 표시되면 RDT_ReadLock
을 사용할 수 없습니다. 대신 RDT_EditLock
을 사용하고 IVsDocumentLockHolder를 등록해야 합니다(__VSREGDOCLOCKHOLDER.RDLH_WeakLockHolder 플래그의 경우).
RDT_EditLock 및 문서 수정
앞서 언급한 플래그는 사용자가 문서를 보이는 DocumentWindow로 열 때 문서의 보이지 않는 열기가 RDT_EditLock
을 생성한다는 것을 나타냅니다. 이 경우 보이는 DocumentWindow가 닫히면 사용자에게 저장 프롬프트가 표시됩니다. IVsInvisibleEditorManager 서비스를 사용하는 Microsoft.VisualStudio.Package.Automation.OAProject.CodeModel
구현은 처음에 RDT_ReadLock
이 적용될 때만 작동합니다(즉, 정보를 구문 분석하기 위해 문서를 보이지 않게 열 때). 나중에 문서를 수정해야 하는 경우 잠금이 약한 RDT_EditLock으로 업그레이드됩니다. 그런 다음 사용자가 보이는 DocumentWindow에서 문서를 열면 CodeModel
의 약한 RDT_EditLock
이 해제됩니다.
그런 다음 사용자가 DocumentWindow를 닫으면서 열려 있는 문서를 저장하라는 메시지에 아니요를 선택하면 CodeModel
구현은 문서의 모든 정보를 삭제하고 다음에 문서에 대한 더 많은 정보가 필요할 때 보이지 않게 디스크에서 문서를 다시 엽니다. 이 동작의 미묘한 점은 사용자가 보이지 않게 열린 문서의 DocumentWindow를 열고, 수정하고, 닫은 다음 문서를 저장하라는 메시지에 아니요를 선택하는 경우입니다. 이 경우 문서에 RDT_ReadLock
이 있으면 문서가 실제로 닫히지 않으며 사용자가 문서를 저장하지 않도록 선택했음에도 불구하고 수정된 문서가 보이지 않게 열린 상태로 유지됩니다.
문서의 보이지 않는 열기가 약한 RDT_EditLock
을 사용하는 경우 사용자가 문서를 보이게 열고 다른 잠금이 적용되지 않으면 잠금을 생성합니다. 사용자가 DocumentWindow를 닫고 문서를 저장하라는 메시지에 아니요를 선택하면 문서가 메모리에서 닫혀야 합니다. 즉, 보이지 않는 클라이언트는 이러한 발생을 추적하기 위해 RDT 이벤트를 수신 대기해야 합니다. 다음에 문서가 필요할 때 문서를 다시 열어야 합니다.