다음을 통해 공유


문서 잠금 소유자 관리

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

문서 잠금 보유자 시나리오

파일 "a"에 파일 "b"에 대한 의존도가 있습니다.

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

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

편집기 "A"가 파일을 열려고 할 때 편집기 "B"에서 "b" 파일을 이미 연 경우 다음 두 가지 개별 시나리오를 처리해야 합니다.

  • 호환되는 편집기에서 파일 "b"가 열려 있는 경우 편집기 "A"가 메서드를 사용하여 파일 "b"에 문서 편집 잠금을 RegisterDocumentLockHolder 등록해야 합니다. 편집기 "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다음 항목에 대한 변경 내용을 저장하시겠습니까? 대화 상자를 통해 하나 이상의 문서 저장을 처리합니다.