다음을 통해 공유


RDT_ReadLock 사용량

_VSRDTFLAGS. RDT_ReadLock 현재 Visual Studio IDE에서 열려 있는 모든 문서 목록인 RDT(실행 중인 문서 테이블)에서 문서를 잠그는 논리를 제공하는 플래그입니다. 이 플래그는 문서를 여는 시기와 문서가 사용자 인터페이스에 표시되거나 메모리에 보이지 않게 유지되는지 여부를 결정합니다.

일반적으로 _VSRDTFLAGS 사용합니다. 다음 중 하나가 true인 경우 RDT_ReadLock.

  • 보이지 않고 읽기 전용으로 문서를 열려고 하지만 아직 문서를 소유해야 하는 IVsHierarchy 문서가 설정되지 않았습니다.

  • 사용자가 UI에 표시한 다음 닫으려고 시도하기 전에 보이지 않게 열린 문서를 저장하라는 메시지가 사용자에게 표시되도록 합니다.

표시 및 보이지 않는 문서를 관리하는 방법

사용자가 UI IVsHierarchy 에서 문서를 열면 문서의 소유자를 설정하고 _VSRDTFLAGS 합니다. RDT_EditLock 플래그를 설정해야 합니다. 소유자를 설정할 수 없는 IVsHierarchy 경우 사용자가 모두 저장 을 클릭하거나 IDE를 닫을 때 문서가 저장되지 않습니다. 즉, 문서가 메모리에서 수정된 위치에 보이지 않게 열려 있고 종료 시 문서를 저장하라는 메시지가 표시되거나 모두 저장 이 선택 RDT_ReadLock 되면 저장하라는 메시지가 표시되면 사용할 수 없습니다. 대신, __VSREGDOCLOCKHOLDER 때를 IVsDocumentLockHolder 사용하고 RDT_EditLock 등록해야 합니다. RDLH_WeakLockHolder 플래그입니다.

RDT_EditLock 및 문서 수정

앞에서 언급한 플래그는 사용자가 문서를 볼 수 있는 DocumentWindow로 열 때 문서의 보이지 않는 열기를 생성 RDT_EditLock 한다는 것을 나타냅니다. 이 경우 표시되는 DocumentWindow가 닫혀 있으면 사용자에게 저장 프롬프트가 표시됩니다. Microsoft.VisualStudio.Package.Automation.OAProject.CodeModel 서비스를 사용하는 IVsInvisibleEditorManager 구현은 처음에만 수행될 때 RDT_ReadLock 작동합니다(즉, 정보를 구문 분석하기 위해 문서를 보이지 않게 열 때). 나중에 문서를 수정해야 하는 경우 잠금이 약한 RDT_EditLock 업그레이드됩니다. 사용자가 표시되는 DocumentWindowCodeModel에서 문서를 열면 's weak RDT_EditLock 가 해제됩니다.

사용자가 DocumentWindow를 닫고 열려 있는 문서를 CodeModel 저장하라는 메시지가 표시되면 아니요를 선택하면 구현에서 문서의 모든 정보를 삭제하고 다음에 문서에 대한 추가 정보가 필요할 때 보이지 않게 디스크에서 문서를 다시 엽니다. 이 동작의 미묘한 점은 사용자가 보이지 않는 열린 문서의 DocumentWindow 를 열고 수정하고 닫은 다음 문서를 저장하라는 메시지가 표시되면 아니요 를 선택하는 인스턴스입니다. 이 경우 문서에 문서가 있으면 RDT_ReadLock문서가 실제로 닫혀 있지 않으며 사용자가 문서를 저장하지 않도록 선택했음에도 불구하고 수정된 문서가 보이지 않게 메모리에서 열린 상태로 유지됩니다.

보이지 않는 문서 열기가 약한 RDT_EditLock경우 사용자가 문서를 눈에 띄게 열고 다른 잠금이 유지되지 않을 때 잠금을 생성합니다. 사용자가 DocumentWindow 를 닫고 문서를 저장하라는 메시지가 표시되면 아니요 를 선택하면 문서를 메모리에서 닫아야 합니다. 즉, 보이지 않는 클라이언트는 RDT 이벤트를 수신 대기하여 이 항목을 추적해야 합니다. 다음에 문서가 필요할 때 문서를 다시 열어야 합니다.