Compartir a través de


Tabla de documentos en ejecución

El IDE mantiene la lista de todos los documentos abiertos actualmente en una estructura interna denominada tabla de documentos en ejecución (RDT). Esta lista incluye todos los documentos abiertos en memoria, independientemente de si estos documentos se están editando actualmente. Un documento es cualquier elemento que se conserva, incluidos los archivos de un proyecto o el archivo de proyecto principal (por ejemplo, un archivo .vcxproj).

Elementos de la tabla de documentos en ejecución

La tabla de documentos en ejecución contiene las siguientes entradas.

Elemento Descripción
Moniker de documento Cadena que identifica de forma única el objeto de datos del documento. Esta sería la ruta de acceso de archivo absoluta para un sistema de proyecto que administra archivos (por ejemplo, C:\MyProject\MyFile). Esta cadena también se usa para los proyectos guardados en almacenes que no sean sistemas de archivos, como procedimientos almacenados en una base de datos. En este caso, el sistema de proyectos puede inventar una cadena única que puede reconocer y posiblemente analizar para determinar cómo almacenar el documento.
Propietario de la jerarquía Objeto de jerarquía que posee el documento, representado por una IVsHierarchy interfaz.
Id. de producto Identificador de elemento de un elemento específico dentro de la jerarquía. Este valor es único entre todos los documentos de la jerarquía que posee este documento, pero no se garantiza que este valor sea único en distintas jerarquías.
Objeto de datos de documento Como mínimo, esto es un IUnknown

objeto. El IDE no requiere ninguna interfaz concreta más allá de la interfaz para el IUnknown objeto de datos de documento de un editor personalizado. Sin embargo, para un editor estándar, la implementación del editor de la IVsPersistDocData2 interfaz es necesaria para controlar las llamadas de persistencia de archivos desde el proyecto. Para obtener más información, vea Guardar un documento estándar.
Marcas Marcas que controlan si se guarda el documento, si se aplica un bloqueo de lectura o edición, etc., se pueden especificar cuando se agregan entradas al RDT. Para obtener más información, vea la enumeración _VSRDTFLAGS.
Editar recuento de bloqueos Recuento de bloqueos de edición. Un bloqueo de edición indica que algún editor tiene el documento abierto para su edición. Cuando el recuento de bloqueos de edición pasa a cero, se pide al usuario que guarde el documento, si se ha modificado. Por ejemplo, cada vez que abra un documento en un editor mediante el comando Nueva ventana , se agrega un bloqueo de edición para ese documento en RDT. Para que se establezca un bloqueo de edición, el documento debe tener una jerarquía o un identificador de elemento.
Recuento de bloqueos de lectura Recuento de bloqueos de lectura. Un bloqueo de lectura indica que el documento se está leyendo a través de algún mecanismo, como un asistente. Un bloqueo de lectura contiene un documento activo en el RDT mientras indica que el documento no se puede editar. Puede establecer un bloqueo de lectura incluso si el documento no tiene una jerarquía o identificador de elemento. Esta característica le permite abrir un documento en memoria y escribirlo en RDT sin que el documento sea propiedad de ninguna jerarquía. Esta característica rara vez se usa.
Portabloqueo Instancia de una IVsDocumentLockHolder interfaz. El soporte de bloqueo se implementa mediante características como asistentes que abren y editan documentos fuera de un editor. Un titular de bloqueo permite que la característica agregue un bloqueo de edición al documento para evitar que el documento se cierre mientras se está editando. Normalmente, las ventanas de documento solo agregan bloqueos de edición (es decir, editores).

Cada entrada de RDT tiene una jerarquía o identificador de elemento único asociado, que normalmente corresponde a un nodo del proyecto. Todos los documentos disponibles para su edición suelen ser propiedad de una jerarquía. Entradas realizadas en el control RDT que proyecto o, con mayor precisión, qué jerarquía posee actualmente el objeto de datos del documento que se está editando. Con la información de RDT, el IDE puede impedir que un documento se abra mediante más de un proyecto a la vez.

La jerarquía también controla la persistencia de los datos y usa la información del RDT para actualizar los cuadros de diálogo Guardar y Guardar como . Cuando los usuarios modifican un documento y, a continuación, elige el comando Salir en el menú Archivo , el IDE los solicita con el cuadro de diálogo Guardar cambios para mostrar todos los proyectos y elementos de proyecto que están modificados actualmente. Esto permite a los usuarios elegir cuál de los documentos se van a guardar. La lista de documentos que se van a guardar (es decir, los documentos que tienen cambios) se generan a partir del RDT. Los elementos que espera ver en el cuadro de diálogo Guardar cambios al salir de la aplicación deben tener registros en RDT. El RDT coordina qué documentos se guardan y si se solicita al usuario una operación de guardado mediante los valores especificados en la entrada Flags para cada documento. Para obtener más información sobre las marcas RDT, consulte la _VSRDTFLAGS enumeración .

Editar bloqueos y bloqueos de lectura

Editar bloqueos y bloqueos de lectura residen en RDT. La ventana del documento incrementa y disminuye el bloqueo de edición. Por lo tanto, cuando un usuario abre una nueva ventana de documento, el recuento de bloqueos de edición aumenta en uno. Cuando el número de bloqueos de edición alcanza cero, la jerarquía se señala para conservar o guardar los datos del documento asociado. Después, la jerarquía puede conservar los datos de cualquier manera, incluida la conservación como un archivo o como un elemento de un repositorio. Puede usar el LockDocument método en la IVsRunningDocumentTable interfaz para agregar bloqueos de edición y bloqueos de lectura, y el UnlockDocument método para quitar estos bloqueos.

Normalmente, cuando se crea una instancia de la ventana del documento para un editor, el marco de la ventana agrega automáticamente un bloqueo de edición para el documento en RDT. Sin embargo, si crea una vista personalizada de un documento que no usa una ventana de documento estándar (es decir, no implementa la IVsWindowFrame interfaz), debe establecer su propio bloqueo de edición. Por ejemplo, en un asistente, se edita un documento sin abrirse en un editor. Para que los asistentes y entidades similares abran los bloqueos de documentos, estas entidades deben implementar la IVsDocumentLockHolder interfaz . Para registrar el titular del bloqueo del documento, llame al RegisterDocumentLockHolder método y pase la IVsDocumentLockHolder implementación. Al hacerlo, se agrega el titular del bloqueo del documento al RDT. Otro escenario para implementar un portabloqueo de documento es si abre un documento a través de una ventana de herramientas especial. En este caso, no puede hacer que la ventana de herramientas cierre el documento. Sin embargo, al registrarse como titular de bloqueo de documento en RDT, el IDE puede llamar a la CloseDocumentHolder implementación del método para solicitar un cierre del documento.

Otros usos de la tabla de documentos en ejecución

Otras entidades del IDE usan RDT para obtener información sobre los documentos. Por ejemplo, el administrador de control de código fuente usa RDT para indicar al sistema que vuelva a cargar un documento en el editor, después de obtener la versión más reciente del archivo. Para ello, el administrador de control de código fuente busca los archivos en RDT para ver si alguno de ellos está abierto. Si son, el administrador de control de código fuente comprueba primero que la jerarquía implementa el ReloadItem método . Si el proyecto no implementa el ReloadItem método , el administrador de control de código fuente comprueba si hay una implementación del ReloadDocData método en el objeto de datos del documento directamente.

El IDE también usa RDT para volver a mostrar (traer al frente) un documento abierto, si un usuario solicita ese documento. Para obtener más información, vea Mostrar archivos mediante el comando Abrir archivo. Para determinar si un archivo está abierto en RDT, haga lo siguiente.

  • Consulte el moniker del documento (es decir, la ruta de acceso completa del documento) para averiguar si el elemento está abierto.

  • Use la jerarquía o el identificador de elemento para pedir al sistema de proyecto la ruta de acceso completa del documento y, a continuación, busque el elemento en el RDT.

Consulte también