다음을 통해 공유


문서 잠금 소유자 관리

RDT(실행 중인 문서 테이블)는 열려 있는 문서 수와 모든 편집 잠금을 유지합니다. 사용자가 문서 창에 열려 있는 문서를 보지 않고 프로그래밍 방식으로 백그라운드에서 편집할 때 RDT의 문서에 편집 잠금을 배치할 수 있습니다. 이 기능은 그래픽 사용자 인터페이스를 통해 파일 여러 개를 수정하는 디자이너에서 자주 사용됩니다.

문서 잠금 소유자 시나리오

파일 "a"에 파일 "b"에 대한 종속성이 있습니다.

파일 형식 "a"에 표준 편집기 "A"를 구현하고 "a" 형식의 파일마다 "b" 형식의 파일에 대한 참조(또는 종속성)가 있는 상황을 고려합니다. "b" 형식의 파일의 표준 편집기 "B"가 있습니다. 편집기 "A"에서 파일 "a"를 열면 해당 파일 "b"에 대한 참조를 검색합니다. 파일 "b"는 표시되지 않지만 편집기 "A"에서 이 파일을 수정할 수 있습니다. 편집기 "A"는 FindAndLockDocument 메서드에서 파일 "b"의 문서 데이터에 대한 참조를 가져오고 파일 "b"에 대한 편집 잠금도 유지합니다. 편집기 "A"에서 파일 "b"를 수정한 후 UnlockDocument 메서드를 호출하여 파일 "b"의 편집 잠금 수를 줄일 수 있습니다. _VSRDTFLAGS.RDT_NoLock으로 설정된 매개 변수 dwRDTLockType을 사용하여 FindAndLockDocument 메서드를 호출했으면 이 단계를 생략할 수 있습니다.

파일 "b"가 다른 편집기에서 열립니다.

편집기 "A"가 파일을 열려고 할 때 편집기 "B"에서 파일 "b"를 이미 열었으면 다음 두 가지 시나리오를 각각 처리해야 합니다.

  • 호환되는 편집기에서 파일 "b"를 열었으면 편집기 "A"가 RegisterDocumentLockHolder 메서드를 사용하여 파일 "b"에 문서 편집 잠금을 등록해야 합니다. 편집기 "A"가 파일 "b"를 수정했으면 UnregisterDocumentLockHolder 메서드를 사용하여 문서 편집 잠금을 등록 취소합니다.

  • 파일 "b"를 호환되지 않는 방식으로 열었으면 편집기 "A"에서 파일 "b"를 열지 못하게 하거나 편집기 "A"와 연결된 보기가 부분적으로 열리고 적절한 오류 메시지가 표시되게 할 수 있습니다. 오류 메시지는 호환되지 않는 편집기에서 파일 "b"를 닫은 다음, 편집기 "A"를 사용하여 파일 "a"를 다시 열도록 사용자에게 지시해야 합니다. Visual Studio SDK 메서드 QueryCloseRunningDocument를 구현하여 호환되지 않는 편집기에서 열려 있는 파일 "b"를 닫도록 사용자에게 메시지를 표시할 수도 있습니다. 사용자가 "b" 파일을 닫으면 편집기 "A"에서 파일 "a"가 정상적으로 계속 열립니다.

추가 문서 편집 잠금 고려 사항

편집기 "A"가 파일 "b"에 대한 문서 편집 잠금이 있는 유일한 편집기인 경우 편집기 "B"가 파일 "b"에 대한 문서 편집 잠금을 보유하는 경우와 다른 동작이 나타납니다. Visual Studio에서 클래스 디자이너는 연결된 코드 파일에 대한 편집 잠금을 보유하지 않는 비주얼 디자이너의 예입니다. 즉, 사용자에게 디자인 뷰에 열려 있는 클래스 다이어그램이 있고 연결된 코드 파일이 동시에 열린 경우와 사용자가 코드 파일을 수정하지만 변경 사항을 저장하지 않은 경우 클래스 다이어그램(.cd) 파일에 대한 변경 사항도 손실됩니다. 클래스 디자이너에 코드 파일에 대한 유일한 문서 편집 잠금이 있으면 사용자에게 코드 파일을 닫을 때 변경 사항을 저장하라는 메시지가 표시되지 않습니다. IDE는 사용자가 클래스 디자이너를 닫은 후에만 사용자에게 변경 사항을 저장하라고 요청합니다. 저장된 변경 사항은 두 파일 모두에 반영됩니다. 클래스 디자이너와 코드 파일 편집기 모두 코드 파일에 문서 편집 잠금을 보유하면 코드 파일이나 양식을 닫을 때 사용자에게 저장하라는 메시지가 표시됩니다. 이때 저장된 변경 사항은 양식과 코드 파일 모두에 반영됩니다. 클래스 다이어그램에 대한 자세한 내용은 클래스 다이어그램 작업(클래스 디자이너)을 참조하세요.

편집기가 아닌 문서에 편집 잠금을 배치해야 하는 경우에는 IVsDocumentLockHolder 인터페이스를 구현해야 합니다.

여러 번 코드 파일을 수정하는 UI 디자이너가 파일 두 개 이상을 프로그래밍 방식으로 변경합니다. 이러한 경우 SaveItemsViaDlg 메서드에서 다음 항목에 대한 변경 내용을 저장하시겠습니까? 대화 상자를 통해 문서를 하나 이상 저장합니다.