Compartilhar via


Tabela de documento em execução

O IDE mantém a lista de todos os documentos abertos atualmente em uma estrutura interna chamada RDT (tabela de documentos em execução). Essa lista inclui todos os documentos abertos na memória, independentemente de esses documentos estarem sendo editados no momento. Um documento é qualquer item que é persistido, incluindo arquivos em um projeto ou o arquivo de projeto principal (por exemplo, um arquivo .vcxproj).

Elementos da tabela de documentos em execução

A tabela de documentos em execução contém as seguintes entradas.

Element Descrição
Apelido do documento Uma cadeia de caracteres que identifica exclusivamente o objeto de dados do documento. Esse seria o caminho de arquivo absoluto para um sistema de projeto que gerencia arquivos (por exemplo, C:\MyProject\MyFile). Essa cadeia de caracteres também é usada para projetos salvos em armazenamentos diferentes de sistemas de arquivos, como procedimentos armazenados em um banco de dados. Nesse caso, o sistema de projeto pode inventar uma cadeia de caracteres exclusiva que ele pode reconhecer e possivelmente analisar para determinar como armazenar o documento.
Proprietário da hierarquia O objeto de hierarquia que possui o documento, conforme representado por uma IVsHierarchy interface.
ID do Item Identificador de item para um item específico dentro da hierarquia. Esse valor é exclusivo entre todos os documentos na hierarquia que possui este documento, mas não é garantido que esse valor seja exclusivo em diferentes hierarquias.
Objeto de dados do documento No mínimo, este é um IUnknown

. O IDE não requer nenhuma interface específica além da IUnknown interface para um objeto de dados de documento do editor personalizado. No entanto, para um editor padrão, a implementação da interface do editor é necessária para lidar com chamadas de IVsPersistDocData2 persistência de arquivo do projeto. Para obter mais informações, consulte Salvando um documento padrão.
Sinalizadores Os sinalizadores que controlam se o documento é salvo, se um bloqueio de leitura ou edição é aplicado e assim por diante, podem ser especificados quando as entradas são adicionadas ao RDT. Para obter mais informações, consulte a enumeração _VSRDTFLAGS.
Editar contagem de bloqueios Contagem de bloqueios de edição. Um bloqueio de edição indica que algum editor tem o documento aberto para edição. Quando a contagem de bloqueios de edição transita para zero, o usuário é solicitado a salvar o documento, se ele tiver sido modificado. Por exemplo, sempre que você abre um documento em um editor usando o comando Nova Janela , um bloqueio de edição é adicionado para esse documento no RDT. Para que um bloqueio de edição seja definido, o documento deve ter uma hierarquia ou ID de item.
Contagem de bloqueio de leitura Contagem de bloqueios de leitura. Um bloqueio de leitura indica que o documento está sendo lido por meio de algum mecanismo, como um assistente. Um bloqueio de leitura mantém um documento ativo no RDT enquanto indica que o documento não pode ser editado. Você pode definir um bloqueio de leitura mesmo se o documento não tiver uma hierarquia ou ID de item. Esse recurso permite que você abra um documento na memória e o insira no RDT sem que o documento seja de propriedade de qualquer hierarquia. Esse recurso raramente é usado.
Suporte de bloqueio Uma instância de uma IVsDocumentLockHolder interface. O suporte de bloqueio é implementado por recursos como assistentes que abrem e editam documentos fora de um editor. Um suporte de bloqueio permite que o recurso adicione um bloqueio de edição ao documento para impedir que o documento seja fechado enquanto ainda está sendo editado. Normalmente, os bloqueios de edição são adicionados apenas por janelas de documentos (ou seja, editores).

Cada entrada no RDT tem uma hierarquia exclusiva ou ID de item associado a ela, que geralmente corresponde a um nó no projeto. Todos os documentos disponíveis para edição são normalmente propriedade de uma hierarquia. As entradas feitas no RDT controlam qual projeto ou, mais precisamente, qual hierarquia atualmente possui o objeto de dados do documento que está sendo editado. Usando as informações no RDT, o IDE pode impedir que um documento seja aberto por mais de um projeto ao mesmo tempo.

A hierarquia também controla a persistência dos dados e usa as informações no RDT para atualizar as caixas de diálogo Salvar e Salvar como. Quando os usuários modificam um documento e, em seguida, escolhem o comando Sair no menu Arquivo, o IDE solicita a caixa de diálogo Salvar alterações para mostrar a eles todos os projetos e itens de projeto que estão modificados no momento. Isso permite que os usuários escolham quais dos documentos salvar. A lista de documentos a serem salvos (ou seja, aqueles documentos que têm alterações) é gerada a partir do RDT. Todos os itens que você espera ver na caixa de diálogo Salvar alterações ao sair do aplicativo devem ter registros no RDT. O RDT coordena quais documentos são salvos e se o usuário é solicitado sobre uma operação de salvamento usando os valores especificados na entrada Sinalizadores para cada documento. Para obter mais informações sobre os sinalizadores RDT, consulte a _VSRDTFLAGS enumeração.

Editar bloqueios e ler bloqueios

Os bloqueios de edição e os bloqueios de leitura residem no RDT. A janela do documento incrementa e diminui o bloqueio de edição. Assim, quando um usuário abre uma nova janela de documento, a contagem de bloqueio de edição aumenta em um. Quando o número de bloqueios de edição atinge zero, a hierarquia é sinalizada para persistir ou salvar os dados do documento associado. A hierarquia pode então persistir os dados de qualquer maneira, incluindo persistir como um arquivo ou como um item em um repositório. Você pode usar o LockDocument IVsRunningDocumentTable método na interface para adicionar bloqueios de edição e bloqueios de leitura, e o UnlockDocument método para remover esses bloqueios.

Normalmente, quando a janela do documento para um editor é instanciada, o quadro da janela adiciona automaticamente um bloqueio de edição para o documento no RDT. No entanto, se você criar uma exibição personalizada de um documento que não usa uma janela de documento padrão (ou seja, não implementa a IVsWindowFrame interface), será necessário definir seu próprio bloqueio de edição. Por exemplo, em um assistente, um documento é editado sem ser aberto em um editor. Para que os bloqueios de documentos sejam abertos por assistentes e entidades semelhantes, essas entidades devem implementar a IVsDocumentLockHolder interface. Para registrar o suporte de bloqueio de documento, chame o RegisterDocumentLockHolder método e passe em sua IVsDocumentLockHolder implementação. Isso adiciona o suporte de bloqueio de documento ao RDT. Outro cenário para implementar um suporte de bloqueio de documento é se você abrir um documento através de uma janela de ferramenta especial. Nesse caso, não é possível que a janela de ferramentas feche o documento. No entanto, ao se registrar como um detentor de bloqueio de documento no RDT, o IDE pode chamar sua implementação do método para solicitar um fechamento do CloseDocumentHolder documento.

Outros usos da tabela de documentos em execução

Outras entidades no IDE usam o RDT para obter informações sobre documentos. Por exemplo, o gerenciador de controle do código-fonte usa o RDT para dizer ao sistema para recarregar um documento no editor, depois que ele obtém a versão mais recente do arquivo. Para fazer isso, o gerenciador de controle do código-fonte procura os arquivos no RDT para ver se algum deles está aberto. Se estiverem, o gerenciador de controle do código-fonte primeiro verifica se a hierarquia implementa o ReloadItem método. Se o projeto não implementar o método, o ReloadItem gerenciador de controle do código-fonte verificará uma implementação do método no objeto de dados do ReloadDocData documento diretamente.

O IDE também usa o RDT para ressurgir (trazer para a frente) um documento aberto, se um usuário solicitar esse documento. Para obter mais informações, consulte Exibindo arquivos usando o comando Abrir arquivo. Para determinar se um arquivo está aberto no RDT, siga um destes procedimentos.

  • Consulte o moniker do documento (ou seja, o caminho completo do documento) para descobrir se o item está aberto.

  • Use a hierarquia ou a ID do item para solicitar ao sistema de projeto o caminho completo do documento e, em seguida, procure o item no RDT.

Confira também