Uso di RDT_ReadLock
_VSRDTFLAGS. RDT_ReadLock è un flag che fornisce la logica per bloccare un documento nella tabella documenti in esecuzione (RDT), ovvero l'elenco di tutti i documenti attualmente aperti nell'IDE di Visual Studio. Questo flag determina quando i documenti vengono aperti e se un documento è visibile nell'interfaccia utente o mantenuto invisibile in memoria.
In genere, si usano _VSRDTFLAGS. RDT_ReadLock quando si verifica una delle condizioni seguenti:
Si vuole aprire un documento invisibile e di sola lettura, ma non è ancora stato stabilito che IVsHierarchy deve essere proprietario.
Si vuole che all'utente venga richiesto di salvare un documento aperto invisibile prima che l'utente lo visualizzi nell'interfaccia utente e quindi tenti di chiuderlo.
Come gestire documenti visibili e invisibili
Quando un utente apre un documento nell'interfaccia utente, è necessario stabilire un IVsHierarchy proprietario per il documento e un _VSRDTFLAGS. RDT_EditLock flag deve essere impostato. Se non è possibile stabilire alcun IVsHierarchy proprietario, il documento non verrà salvato quando l'utente fa clic su Salva tutto o chiude l'IDE. Ciò significa che se un documento è aperto invisibly in cui viene modificato in memoria e all'utente viene richiesto di salvare il documento in caso di arresto o salvato se si seleziona Salva tutto , non è possibile utilizzare un oggetto RDT_ReadLock
. È invece necessario usare e registrare RDT_EditLock
un IVsDocumentLockHolder oggetto quando un __VSREGDOCLOCKHOLDER. RDLH_WeakLockHolder flag.
RDT_EditLock e modifica del documento
Il flag precedente indicato indica che l'apertura invisibile del documento restituirà RDT_EditLock
quando il documento viene aperto dall'utente in un DocumentWindow visibile. In questo caso, all'utente viene visualizzata una richiesta di salvataggio quando viene chiuso DocumentWindow visibile. Microsoft.VisualStudio.Package.Automation.OAProject.CodeModel
le implementazioni che usano il IVsInvisibleEditorManager servizio funzionano inizialmente solo quando viene acquisito un RDT_ReadLock
oggetto ( ad esempio, quando il documento viene aperto invisibly per analizzare le informazioni). Successivamente, se il documento deve essere modificato, il blocco viene aggiornato a un RDT_EditLock debole. Se l'utente apre quindi il documento in un documento visibileWindow, viene rilasciato l'elemento CodeModel
deboleRDT_EditLock
.
Se l'utente chiude documentWindow e sceglie No quando viene richiesto di salvare il documento aperto, l'implementazione CodeModel
elimina tutte le informazioni nel documento e riapre il documento dal disco invisibly alla successiva richiesta di ulteriori informazioni per il documento. La sottigliezza di questo comportamento è un'istanza in cui l'utente apre documentWindow del documento aperto invisibile, lo modifica, lo chiude e quindi sceglie No quando viene richiesto di salvare il documento. In questo caso, se il documento ha un RDT_ReadLock
oggetto , il documento non verrà effettivamente chiuso e il documento modificato rimarrà invisibile in memoria, anche se l'utente ha scelto di non salvare il documento.
Se l'apertura invisibile del documento utilizza un oggetto debole RDT_EditLock
, restituisce il blocco quando l'utente apre il documento in modo visibile e non vengono mantenuti altri blocchi. Quando l'utente chiude DocumentWindow e sceglie No quando viene richiesto di salvare il documento, il documento deve essere chiuso dalla memoria. Ciò significa che il client invisibile deve restare in ascolto degli eventi RDT per tenere traccia di questa occorrenza. Alla successiva richiesta del documento, il documento deve essere riaperto.