Sdílet prostřednictvím


Využití RDT_ReadLock

_VSRDTFLAGS. RDT_ReadLock je příznak, který poskytuje logiku pro uzamčení dokumentu ve spuštěné tabulce dokumentů (RDT), což je seznam všech dokumentů, které jsou aktuálně otevřené v integrovaném vývojovém prostředí sady Visual Studio. Tento příznak určuje, kdy jsou dokumenty otevřeny a zda je dokument viditelný v uživatelském rozhraní nebo je uložen v paměti.

Obecně platí, že používáte _VSRDTFLAGS. RDT_ReadLock, pokud platí jedna z následujících možností:

  • Chcete otevřít dokument bez dohledu a jen pro čtení, ale zatím není vytvořený, který IVsHierarchy by měl být vlastníkem.

  • Chcete, aby se uživateli zobrazila výzva k uložení dokumentu, který byl předtím, než ho uživatel zobrazil v uživatelském rozhraní, a pokusil se ho zavřít.

Správa viditelných a neviditelných dokumentů

Když uživatel otevře dokument v uživatelském rozhraní, IVsHierarchy musí být vytvořen vlastník dokumentu a _VSRDTFLAGS. RDT_EditLock příznak musí být nastavený. Pokud není možné vytvořit vlastníka IVsHierarchy , dokument se neuloží, když uživatel klikne na Uložit vše nebo zavře integrované vývojové prostředí .IDE. To znamená, že pokud je dokument otevřen místně, kde je změněn v paměti, a uživatel se zobrazí výzva k uložení dokumentu při vypnutí nebo uložení, pokud je vybrán uložit vše , nelze RDT_ReadLock jej použít. Místo toho musíte použít a RDT_EditLock zaregistrovat IVsDocumentLockHolder , když __VSREGDOCLOCKHOLDER. RDLH_WeakLockHolder příznak.

úpravy RDT_EditLock a dokumentu

Předchozí příznak označuje, že neviditelné otevření dokumentu přinese jeho RDT_EditLock při otevření dokumentu uživatelem do viditelného DocumentWindow. Když k tomu dojde, zobrazí se uživateli výzva Uložit při zavření viditelného DocumentWindow . Microsoft.VisualStudio.Package.Automation.OAProject.CodeModel implementace, které používají IVsInvisibleEditorManager službu při počáteční práci pouze při použití ( RDT_ReadLock tj. při otevření dokumentu k analýze informací). Pokud je potřeba dokument později upravit, zámek se upgraduje na slabou RDT_EditLock. Pokud uživatel dokument otevře ve viditelném DocumentWindow, CodeModeluvolní se slabé RDT_EditLock .

Pokud uživatel potom zavře DocumentWindow a zvolí Ne po zobrazení výzvy k uložení otevřeného dokumentu, CodeModel pak implementace odstraní všechny informace v dokumentu a znovu otevře dokument z disku, jakmile se pro dokument vyžaduje další informace. Jemnost tohoto chování je instance, ve které uživatel otevře DocumentWindow neviditelného otevřeného dokumentu, upraví ho, zavře ho a po zobrazení výzvy k uložení dokumentu zvolí ne . V takovém případě, pokud dokument obsahuje RDT_ReadLock, dokument nebude ve skutečnosti zavřený a upravený dokument zůstane otevřený v paměti, i když uživatel zvolil, že dokument neuloží.

Pokud neviditelné otevření dokumentu používá slabé , pak se při otevření dokumentu uživatelem zobrazí slabý RDT_EditLockzámek a žádné jiné zámky se neudržují. Když uživatel zavře DocumentWindow a po zobrazení výzvy k uložení dokumentu zvolí Ne , musí být dokument zavřený z paměti. To znamená, že neviditelný klient musí naslouchat událostem RDT ke sledování tohoto výskytu. Při příštím vyžadování dokumentu je nutné dokument znovu otevřít.