Condividi tramite


Tabella documenti in esecuzione

L'IDE mantiene l'elenco di tutti i documenti attualmente aperti in una struttura interna denominata tabella documento in esecuzione (RDT). Questo elenco include tutti i documenti aperti in memoria, indipendentemente dal fatto che questi documenti siano in corso di modifica. Un documento è qualsiasi elemento persistente, inclusi i file in un progetto o il file di progetto principale ,ad esempio un file vcxproj.

Elementi della tabella documento in esecuzione

La tabella del documento in esecuzione contiene le voci seguenti.

Elemento Descrizione
Moniker documento Stringa che identifica in modo univoco l'oggetto dati del documento. Si tratta del percorso di file assoluto per un sistema di progetto che gestisce i file , ad esempio C:\MyProject\MyFile. Questa stringa viene usata anche per i progetti salvati in archivi diversi dai file system, ad esempio le stored procedure in un database. In questo caso, il sistema di progetto può inventare una stringa univoca che possa riconoscere ed eventualmente analizzare per determinare come archiviare il documento.
Proprietario gerarchia Oggetto hierarchy proprietario del documento, rappresentato da un'interfaccia IVsHierarchy .
ID articolo Identificatore dell'elemento per un elemento specifico all'interno della gerarchia. Questo valore è univoco tra tutti i documenti nella gerarchia proprietaria del documento, ma questo valore non è garantito che sia univoco tra gerarchie diverse.
Oggetto dati documento Come minimo, si tratta di un IUnknown

. L'IDE non richiede alcuna interfaccia specifica oltre l'interfaccia per l'oggetto IUnknown dati del documento di un editor personalizzato. Tuttavia, per un editor standard, l'implementazione dell'editor dell'interfaccia IVsPersistDocData2 è necessaria per gestire le chiamate di persistenza dei file dal progetto. Per altre informazioni, vedere Salvataggio di un documento standard.
Flag Flag che controllano se il documento viene salvato, se viene applicato un blocco di lettura o modifica e così via, può essere specificato quando le voci vengono aggiunte a RDT. Per altre informazioni, vedere l'enumerazione _VSRDTFLAGS.
Modifica conteggio blocchi Numero di blocchi di modifica. Un blocco di modifica indica che alcuni editor hanno aperto il documento per la modifica. Quando il conteggio dei blocchi di modifica passa a zero, all'utente viene richiesto di salvare il documento, se è stato modificato. Ad esempio, ogni volta che si apre un documento in un editor usando il comando Nuova finestra , viene aggiunto un blocco di modifica per tale documento in RDT. Per impostare un blocco di modifica, il documento deve avere una gerarchia o un ID elemento.
Lettura conteggio blocchi Numero di blocchi di lettura. Un blocco di lettura indica che il documento viene letto tramite un meccanismo, ad esempio una procedura guidata. Un blocco di lettura contiene un documento attivo in RDT, mentre indica che il documento non può essere modificato. È possibile impostare un blocco di lettura anche se il documento non ha una gerarchia o un ID elemento. Questa funzionalità consente di aprire un documento in memoria e immetterlo in RDT senza che il documento sia di proprietà di una gerarchia. Questa funzionalità viene usata raramente.
Supporto di blocco Istanza di un'interfaccia IVsDocumentLockHolder . Il supporto di blocco viene implementato da funzionalità come le procedure guidate che aprono e modificano documenti all'esterno di un editor. Un supporto di blocco consente alla funzionalità di aggiungere un blocco di modifica al documento per impedire che il documento venga chiuso mentre è ancora in fase di modifica. In genere, i blocchi di modifica vengono aggiunti solo dalle finestre dei documenti, ovvero dagli editor.

A ogni voce di RDT è associato un ID di gerarchia o elemento univoco, che in genere corrisponde a un nodo del progetto. Tutti i documenti disponibili per la modifica sono in genere di proprietà di una gerarchia. Voci effettuate nel controllo RDT che progetto o, più accuratamente, possiede l'oggetto dati del documento da modificare. Usando le informazioni contenute in RDT, l'IDE può impedire l'apertura di un documento da più progetti alla volta.

La gerarchia controlla anche la persistenza dei dati e usa le informazioni contenute in RDT per aggiornare le finestre di dialogo Salva e Salva con nome. Quando gli utenti modificano un documento e quindi scelgono il comando Esci dal menu File , l'IDE richiede loro la finestra di dialogo Salva modifiche per visualizzarli tutti i progetti e gli elementi del progetto attualmente modificati. In questo modo gli utenti possono scegliere quale dei documenti salvare. L'elenco di documenti da salvare (ovvero i documenti con modifiche) viene generato da RDT. Tutti gli elementi che si prevede di visualizzare nella finestra di dialogo Salva modifiche all'uscita dall'applicazione devono contenere record in RDT. Coordinate RDT che vengono salvate e se all'utente viene richiesto di eseguire un'operazione di salvataggio utilizzando i valori specificati nella voce Flags per ogni documento. Per altre informazioni sui flag RDT, vedere l'enumerazione _VSRDTFLAGS .

Modifica blocchi e blocchi di lettura

Modificare i blocchi e i blocchi di lettura risiedono in RDT. La finestra del documento incrementa e decrementa il blocco di modifica. Pertanto, quando un utente apre una nuova finestra del documento, il conteggio dei blocchi di modifica viene incrementato di uno. Quando il numero di blocchi di modifica raggiunge zero, la gerarchia viene segnalata per rendere persistenti o salvare i dati per il documento associato. La gerarchia può quindi rendere persistenti i dati in qualsiasi modo, inclusa la persistenza come file o come elemento in un repository. È possibile usare il LockDocument metodo nell'interfaccia IVsRunningDocumentTable per aggiungere blocchi di modifica e lettura e il UnlockDocument metodo per rimuovere questi blocchi.

In genere, quando viene creata un'istanza della finestra del documento per un editor, la cornice della finestra aggiunge automaticamente un blocco di modifica per il documento in RDT. Tuttavia, se si crea una visualizzazione personalizzata di un documento che non usa una finestra di documento standard (ovvero non implementa l'interfaccia IVsWindowFrame ), è necessario impostare il blocco di modifica personalizzato. In una procedura guidata, ad esempio, un documento viene modificato senza essere aperto in un editor. Affinché i blocchi dei documenti vengano aperti da procedure guidate e entità simili, queste entità devono implementare l'interfaccia IVsDocumentLockHolder . Per registrare il titolare del blocco del documento, chiamare il metodo e passare l'implementazione RegisterDocumentLockHolder IVsDocumentLockHolder . In questo modo, il supporto per il blocco del documento viene aggiunto a RDT. Un altro scenario per l'implementazione di un supporto per il blocco del documento è se si apre un documento tramite una finestra degli strumenti speciale. In questo caso, non è possibile chiudere il documento nella finestra degli strumenti. Tuttavia, registrando come titolare di blocco del documento in RDT, l'IDE può chiamare l'implementazione CloseDocumentHolder del metodo per richiedere una chiusura del documento.

Altri usi della tabella dei documenti in esecuzione

Altre entità nell'IDE usano RDT per ottenere informazioni sui documenti. Ad esempio, il gestore del controllo del codice sorgente usa RDT per indicare al sistema di ricaricare un documento nell'editor, dopo aver ottenuto la versione più recente del file. A tale scopo, il gestore del controllo del codice sorgente cerca i file in RDT per verificare se uno di essi è aperto. In caso affermativo, il gestore del controllo del codice sorgente verifica innanzitutto che la gerarchia implementi il ReloadItem metodo . Se il progetto non implementa il ReloadItem metodo , il gestore del controllo del codice sorgente verifica direttamente un'implementazione del ReloadDocData metodo sull'oggetto dati del documento.

L'IDE usa anche RDT per ripristinare (portare in primo piano) un documento aperto, se un utente richiede tale documento. Per altre informazioni, vedere Visualizzazione di file tramite il comando Apri file. Per determinare se un file è aperto in RDT, eseguire una delle operazioni seguenti.

  • Eseguire una query per il moniker del documento, ovvero il percorso completo del documento, per verificare se l'elemento è aperto.

  • Usare la gerarchia o l'ID elemento per chiedere al sistema di progetto il percorso completo del documento e quindi cercare l'elemento in RDT.

Vedi anche