Compartir a través de


Flujo de eventos del proxy de datos

En este tema se describen los detalles de eventos al usar las características del proxy de datos de análisis de entrada de lápiz.

Información general sobre el flujo de eventos del proxy de datos

En el uso del proxy de datos del InkAnalyzer, se supone que la aplicación que integra InkAnalyzer ya tiene un modelo de documento existente al que desean proxy los resultados del análisis. También se supone que la aplicación tendrá resultados de cualquier operación de análisis anterior que desee compilar en su modelo de documento. También puede haber contexto que no sea de entrada de lápiz que se pueda agregar al inkAnalyzer en forma de ImageNode o TextWordNodeContextNode que se puedan anotar con la entrada de lápiz.

La clave del sistema de proxy de datos es para que la aplicación marque elContextNode decomo "rellenado parcialmente" mediante ParcialmentePopulado. Cuando esta marca es true, InkAnalyzer supone que tres cosas sobre ese ContextNode:

  • La ubicación delContextNode dees correcta.
  • El tipo de contextNode es correcto.
  • Toda la demás información sobre esa ContextNode se almacena en otro lugar.

En función de estas tres reglas, si y cuando el InkAnalyzer necesita información adicional sobre un ContextNode generará el evento PopulateContextNode y hará referencia al ContextNode en cuestión. Esto ofrece a la aplicación la oportunidad de establecer toda la información conocida sobre ese ContextNode antes de que el InkAnalyzer lo examine con más detalle. Después de controlar un evento PopulateContextNode, el ContextNode en cuestión debe tener una propiedad de ubicación válida, el número correcto de subnodos establecidos si es un contenedor ContextNode o tener establecidos los trazos correctos, mediante SetStrokes, si es una hoja de lápiz ContextNode. Si no se establece correctamente esta ubicación y la información de subnodo o trazo, se producirá una excepción InvalidOperation. Los subnodos de un contenedor contextNode se pueden establecer como rellenados parcialmente en cuyo caso se producirán más eventos de PopulateContextNode si el inkAnalyzer determina que serán necesarios para la operación de análisis actual.

En las tablas siguientes se describe cuándo se generará el eventopopulateContextNodedurante el uso del InkAnalyzer.

Una vez que InkAnalyzer ha calculado algunos resultados, volverá a la aplicación para actualizar los resultados. El primer evento generado es el evento InkAnalyzerStateChanging. Este evento simplemente significa a la aplicación que InkAnalyzer estado de árbol del objeto está a punto de cambiar. Esto proporciona a las aplicaciones la oportunidad de establecer la marcaparcialmente rellenada en true en cualquier ContextNodes que tengan el estado almacenado en otro lugar. A continuación, InkAnalyzer generará una serie de eventos PopulateContextNode para determinar el estado actual de los datos. Una vez que se determina que se completa una operación de conciliación para determinar qué resultados en segundo plano todavía se pueden aplicar.

Para aplicar resultados a la InkAnalyzer se generan una serie de eventos de modificación de árbol. Los eventos de modificación de árbol describen, paso a paso, todos los cambios necesarios para actualizar los resultados. Estos eventos están diseñados para controlarse en sucesión sin interuption ni canceling. Si la operación de análisis se cancela (a través del método Abort) durante el procesamiento de los eventos de modificación del árbol, el estado del inkAnalyzer no será válido y es posible que sea necesario volver a analizar todo el documento.

En las tablas siguientes se describe cuándo se generan los eventos de modificación del árbol durante el uso de InkAnalyzer. Las tablas hacen referencia a las marcas de tiempo que se muestran a continuación del diagrama de flujo de eventos.

iimage que muestra el flujo entre la interfaz de usuario de la aplicación y el analizador en segundo plano

Agregar un trazo

Marca de tiempo Tipo de evento o propósito Evento generado Comentario
T1, T5 y T9
[Dentro de la llamada a AddStroke()][Evento de exploración de árbol]
evento PopulateContextNode generado
Puede haber n número de eventos de PopulateContextNode generados en función del número de ContextNodes no clasificados existe con un valor ParcialmentePopulado establecido en true.
T1, T5 y T9
[Evento de modificación de árbol]
evento ContextNodeCreated generado
Solo habrá un evento ContextNodeCreated generado como resultado de llamar al métodoaddStroke de. Todos los trazos se agregan al mismo ContextNode sin clasificar.

Eliminar un trazo

Marca de tiempo Tipo de evento o propósito Evento generado Comentario
T2, T6 y T10
[Dentro de la llamada a RemoveStroke()][Evento de exploración de árbol]
evento PopulateContextNode generado
Puede haber varios eventos de PopulateContextNode generados en función del número de ContextNodes relacionados con los trazos que se eliminan tienen un valor ParcialmentePopulated de true.
T2, T6 y T10
[Evento de modificación de árbol]
ContextNodeDeleting evento generado
Puede haber cualquier número de eventos de ContextNodeDeleting generados, en función del contenido de entrada de lápiz que se elimine y de la estructura de análisis actual.

Llamada al método BackgroundAnalyze

Marca de tiempo Tipo de evento o propósito Evento generado Comentario
T3
[Dentro de la llamada a BackgroundAnalyze()][Evento de exploración de árbol]
evento PopulateContextNode generado
Podría haber n número de eventos de PopulateContextNode generados, dependiendo de cuántos ContextNodes en todo el árbol tengan un valor ParcialmentePopulado de true (un evento por ContextNode que se necesita en la operación de análisis actual).

Después de que la llamada a BackgroundAnalyze() devuelva

Marca de tiempo Tipo de evento o propósito Evento generado Comentario
T3 a T7
[Eventos generados desde el subproceso de BG]
Evento de actividad generado
Se generarán varios eventos de actividad durante este período de análisis en segundo plano.

Cuando IntermediateResults está listo

Marca de tiempo Tipo de evento o propósito Evento generado Comentario
T7 a T8
[Eventos generados desde el subproceso de BG, lo que significa el inicio de la primera operación de conciliación]
evento InkAnalyzerStateChanging
Solo se ha generado un evento InkAnalyzerStateChanging. Este evento se genera antes de inspeccionar el estado del InkAnalyzer, lo que da a la aplicación la oportunidad de establecer el valor de ParcialmentePopulado en cualquier nodo o realizar cualquier bloqueo de documento local necesario.
T7 a T8
[Evento de exploración de árbol]
evento PopulateContextNode generado
Podría haber n número de eventos de PopulateContextNode generados, en función del contenido de la entrada de lápiz.
T7 a T8
[Evento de modificación de árbol]
ContextNodeCreated evento generado
Puede haber n número de eventos de ContextNodeCreated generados, en función del contenido de la entrada de lápiz.
T7 a T8
[Evento de modificación de árbol]
ContextNodeDeleting evento generado
Puede haber n número de eventos de ContextNodeDeleting desencadenados, en función del contenido de la entrada de lápiz.
T7 a T8
[Evento de modificación de árbol]
ContextNodeMovingToPosition
Puede haber n número de eventos de ContextNodeMovingToPosition generados, en función del contenido de la entrada de lápiz.
T7 a T8
[Evento de modificación de árbol]
ContextNodeReparenting
Podría haber n número de eventos de ContextNodeReparenting generados, en función del contenido de la entrada de lápiz.
T7 a T8
[Evento de modificación de árbol]
strokeReparented
Podría haber n número de eventos StrokeReparented generados, en función del contenido de la entrada de lápiz.
T7 a T8
[Evento de modificación de árbol]
ContextNodeLinkAdding
Puede haber n número de eventos de ContextNodeLinkAdding generados, en función del contenido de entrada de lápiz.
T7 a T8
[Evento de modificación de árbol]
ContextNodeLinkDeleting
Puede haber n número de eventos de ContextNodeLinkDeleting desencadenados, en función del contenido de la entrada de lápiz.
T7 a T8
[Evento de modificación de árbol]
ContextNodePropertiesUpdated evento generado
Puede haber n número de eventos de ContextNodePropertiesUpdated desencadenados, en función del contenido de entrada de lápiz. ContextNodePropertiesUpdated están programados para generarse después de que se generen todos los demás eventos de modificación de ContextNode durante este período de conciliación .
T7 a T8
[Evento significa el final de la primera operación de conciliación]
Evento IntermediateResults generado
Solo se generará un eventoIntermediateResults por operación de análisis.

Después de que se controle IntermediateResults

Marca de tiempo Tipo de evento o propósito Evento generado Comentario
T8 a T11
[Eventos generados desde el subproceso de BG]
eventoactividad dedesencadenado
Durante este período de análisis en segundo plano se generarán varios eventos Actividad.

Cuando los resultados finales estén listos

Marca de tiempo Tipo de evento o propósito Evento generado Comentario
T11 a T12
[Eventos generados desde el subproceso de BG, lo que significa el inicio de la segunda operación de conciliación]
evento InkAnalyzerStateChanging
Solo se ha generado un evento InkAnalyzerStateChanging. Este evento se genera antes de inspeccionar el estado del InkAnalyzer, lo que da a la aplicación la oportunidad de establecer el valor de ParcialmentePopulado en cualquier nodo o realizar cualquier bloqueo de documento local necesario.
T11 a T12
[Evento de exploración de árbol]
evento PopulateContextNode generado
Puede haber cualquier número de eventos PopulateContextNode generados, en función del contenido de la entrada de lápiz.
T11 a T12
[Evento de modificación de árbol]
ContextNodeCreated evento generado
Puede haber cualquier número de eventos ContextNodeCreated generados, en función del contenido de la entrada de lápiz.
T11 a T12
[Evento de modificación de árbol]
ContextNodeDeleting evento generado
Puede haber cualquier número de ContextNodeDeleting eventos generados, en función del contenido de la entrada de lápiz.
T11 a T12
[Evento de modificación de árbol]
ContextNodeMovingToPosition
Puede haber cualquier número de eventos ContextNodeMovingToPosition generados, en función del contenido de la entrada de lápiz.
T11 a T12
[Evento de modificación de árbol]
ContextNodeReparenting
Puede haber cualquier número de eventos de ContextNodeReparenting generados, en función del contenido de la entrada de lápiz.
T11 a T12
[Evento de modificación de árbol]
strokeReparented
Puede haber cualquier número de eventos StrokeReparented generados, en función del contenido de la entrada de lápiz.
T11 a T12
[Evento de modificación de árbol]
ContextNodeLinkAdding
Puede haber cualquier número de eventos de ContextNodeLinkAdding generados, en función del contenido de la entrada de lápiz.
T11 a T12
[Evento de modificación de árbol]
ContextNodeLinkDeleting
Puede haber cualquier número de eventos de ContextNodeLinkDeleting generados, en función del contenido de entrada de lápiz.
T11 a T12
[Evento de modificación de árbol]
ContextNodePropertiesUpdated evento generado
Puede haber cualquier número de eventos de ContextNodePropertiesUpdated generados, en función del contenido de entrada de lápiz. ContextNodePropertiesUpdated están programados para ser rasied después de que se generen todos los demás eventos de modificación ContextNode durante este período de Conciliar.
T11 a T12
[Evento indica el final de la segunda operación de conciliación]
resultados evento generado
Solo se generará un evento Results por operación de análisis.