Поделиться через


Использование RDT_ReadLock

_VSRDTFLAGS. RDT_ReadLock — это флаг, который предоставляет логику блокировки документа в таблице запуска документов (RDT), которая является списком всех документов, открытых в интегрированной среде разработки Visual Studio. Этот флаг определяет, когда открываются документы, и отображается ли документ в пользовательском интерфейсе или невидимо в памяти.

Как правило, вы используете _VSRDTFLAGS. RDT_ReadLock, если одно из следующих значений имеет значение true:

  • Вы хотите открыть документ невидимо и доступно только для чтения, но он еще не установлен, который IVsHierarchy должен принадлежать ему.

  • Необходимо, чтобы пользователю было предложено сохранить документ, который был невидимо открыт, прежде чем пользователь отображал его в пользовательском интерфейсе, а затем попытался закрыть его.

Управление видимыми и невидимыми документами

Когда пользователь открывает документ в пользовательском интерфейсе, IVsHierarchy необходимо установить владельца документа и _VSRDTFLAGS. необходимо задать флаг RDT_EditLock. Если владелец не IVsHierarchy может быть установлен, документ не будет сохранен, когда пользователь нажимает кнопку "Сохранить все " или закрывает интегрированную среду разработки. Это означает, что если документ открыт невидимо, где он изменяется в памяти, и пользователю будет предложено сохранить документ при завершении работы или сохранении, если выбран параметр "Сохранить все ", то RDT_ReadLock его нельзя использовать. Вместо этого необходимо использовать RDT_EditLock и зарегистрировать при IVsDocumentLockHolder__VSREGDOCLOCKHOLDER. флаг RDLH_WeakLockHolder.

RDT_EditLock и изменение документов

Предыдущий флаг упоминание указывает, что невидимое открытие документа приведет RDT_EditLock к тому, что документ открывается пользователем в видимый DocumentWindow. Когда это происходит, пользователь отображает запрос "Сохранить" при закрытии видимого объекта DocumentWindow. Microsoft.VisualStudio.Package.Automation.OAProject.CodeModel реализации, которые изначально используют IVsInvisibleEditorManager службу, работают только при выполнении только взятия RDT_ReadLock (т. е. при открытии документа невидимо для анализа информации). Позже, если документ должен быть изменен, блокировка обновляется до слабой RDT_EditLock. Если пользователь открывает документ в видимом DocumentWindow, CodeModelRDT_EditLock он освобождается.

Если пользователь закрывает DocumentWindow и выбирает "Нет ", когда появится запрос на сохранение открытого документа, CodeModel реализация удаляет все сведения в документе и повторно открывает документ с диска невидимо, когда требуется дополнительная информация для документа. Тонкость этого поведения — это экземпляр, в котором пользователь открывает DocumentWindow невидимого открытого документа, изменяет его, закрывает его, а затем выбирает "Нет ", когда появится запрос на сохранение документа. В этом случае, если у документа есть RDT_ReadLockдокумент, то документ не будет закрыт, и измененный документ останется невидимым в памяти, даже если пользователь не решил сохранить документ.

Если невидимое открытие документа использует слабое RDT_EditLock, оно выдает блокировку, когда пользователь открывает документ видимо и никакие другие блокировки не хранятся. Когда пользователь закрывает DocumentWindow и выбирает "Нет ", когда появится запрос на сохранение документа, документ должен быть закрыт из памяти. Это означает, что невидимый клиент должен прослушивать события RDT для отслеживания этого вхождения. При следующем необходимости документ должен быть повторно открыт.