Partilhar via


RDT_ReadLock Utilização

_VSRDTFLAGS. RDT_ReadLock é um sinalizador que fornece lógica para bloquear um documento na tabela de documentos em execução (RDT), que é a lista de todos os documentos que estão atualmente abertos no IDE do Visual Studio. Esse sinalizador determina quando os documentos são abertos e se um documento é visível na interface do usuário ou mantido invisivelmente na memória.

Geralmente, você usa _VSRDTFLAGS. RDT_ReadLock quando uma das seguintes situações for verdadeira:

  • Você deseja abrir um documento de forma invisível e somente leitura, mas ainda não está estabelecido quem IVsHierarchy deve possuí-lo.

  • Você deseja que o usuário seja solicitado a salvar um documento que foi aberto invisivelmente antes que o usuário o exiba na interface do usuário e, em seguida, tente fechá-lo.

Como gerenciar documentos visíveis e invisíveis

Quando um usuário abre um documento na interface do usuário, um IVsHierarchy proprietário para o documento deve ser estabelecido e um _VSRDTFLAGS. RDT_EditLock sinalizador deve ser definido. Se nenhum IVsHierarchy proprietário puder ser estabelecido, o documento não será salvo quando o usuário clicar em Salvar tudo ou fechar o IDE. Isso significa que, se um documento estiver aberto invisivelmente onde for modificado na memória, e o usuário for solicitado a salvar o documento no desligamento ou salvo se Salvar tudo for escolhido, um RDT_ReadLock não poderá ser usado. Em vez disso, você deve usar um RDT_EditLock e registrar um IVsDocumentLockHolder quando um __VSREGDOCLOCKHOLDER. RDLH_WeakLockHolder bandeira.

RDT_EditLock e Modificação de Documentos

O sinalizador anterior mencionado indica que a abertura invisível do documento produzirá o seu RDT_EditLock quando o documento for aberto pelo usuário em uma DocumentWindow visível. Quando isso ocorre, o usuário é apresentado com um prompt Save quando a DocumentWindow visível é fechada. Microsoft.VisualStudio.Package.Automation.OAProject.CodeModel As implementações que usam o IVsInvisibleEditorManager serviço inicialmente funcionam quando apenas um RDT_ReadLock é tomado (ou seja, quando o documento é aberto invisivelmente para analisar informações). Mais tarde, se o documento precisar ser modificado, o bloqueio será atualizado para um RDT_EditLock fraco. Se o usuário abrir o documento em uma DocumentWindow visível, o CodeModelfraco RDT_EditLock do será liberado.

Se o usuário fechar a DocumentWindow e escolher Não quando solicitado a salvar o documento aberto, a CodeModel implementação descartará todas as informações no documento e reabrirá o documento do disco invisivelmente na próxima vez que mais informações forem necessárias para o documento. A sutileza desse comportamento é uma instância em que o usuário abre a DocumentWindow do documento aberto invisível, modifica-o, fecha-o e, em seguida, escolhe Não quando solicitado a salvar o documento. Nesse caso, se o documento tiver um RDT_ReadLock, o documento não será realmente fechado e o documento modificado permanecerá aberto invisivelmente na memória, mesmo que o usuário tenha optado por não salvar o documento.

Se a abertura invisível do documento usa um fraco RDT_EditLock, então ele produz seu bloqueio quando o usuário abre o documento visivelmente e nenhum outro bloqueio é mantido. Quando o usuário fecha a DocumentWindow e escolhe Não quando solicitado a salvar o documento, o documento deve ser fechado da memória. Isso significa que o cliente invisível deve escutar eventos RDT para rastrear essa ocorrência. Da próxima vez que o documento for exigido, o documento deve ser reaberto.