Complementos y la clase RealTimeStylus

El objeto RealTimeStylus está diseñado para proporcionar acceso en tiempo real al flujo de datos desde el lápiz de tableta. Los complementos, objetos que implementan la interfaz IStylusSyncPlugin o IStylusAsyncPlugin , se pueden agregar a un objeto RealTimeStylus . Los complementos sincrónicos suelen llamarse directamente mediante el objeto RealTimeStylus en un subproceso de prioridad alta, mientras que los complementos asincrónicos suelen llamarse en el subproceso de la interfaz de usuario (UI) de la aplicación. Cree o use complementos sincrónicos para las tareas que requieren acceso en tiempo real al flujo de datos y que no requieren procesamiento computacional, como el filtrado de paquetes. Cree o use complementos asincrónicos para tareas que no requieran acceso en tiempo real al flujo de datos, como la colección de lápiz.

Algunas tareas pueden ser exigentes desde el punto de vista computacional, pero requieren acceso en tiempo real al flujo de datos, como el reconocimiento de gestos de varias pulsaciones. Para abordar estas necesidades, las API stylusInput proporcionan un modelo realtimeStylus en cascada que permite usar dos objetos RealTimeStylus , cada uno que se ejecuta en su propio subproceso. Para obtener más información sobre el modelo RealTimeStylus en cascada, vea El modelo Cascaded RealTimeStylus.

Las interfaces IStylusSyncPlugin e IStylusAsyncPlugin definen los mismos métodos. Estos métodos permiten que el objeto RealTimeStylus pase los datos del lápiz a cada complemento, independientemente de si es un complemento asincrónico o sincrónico. Las propiedades Microsoft.StylusInput.IStylusSyncPlugin.DataInterest y Microsoft.StylusInput.IStylusAsyncPlugin.DataInterest permiten que cada complemento se suscriba a datos específicos en el flujo de datos del lápiz de tableta. Un complemento solo debe suscribirse a los datos necesarios para realizar su tarea, lo que minimiza las demandas de rendimiento. Para obtener más información sobre los subprocesos y la clase RealTimeStylus , vea Threading Considerations for the StylusInput APIs(Consideraciones de subproceso para las API de StylusInput).

El objeto RealTimeStylus usa objetos en el espacio de nombres Microsoft.StylusInput.PluginData para pasar los datos del lápiz a sus complementos. RealTimeStylus también detecta excepciones producidas por complementos. Cuando RealTimeStylus detecta excepciones, notifica a los complementos mediante una llamada al método IStylusSyncPlugin.Error o IStylusAsyncPlugin.Error . Para obtener más información sobre el uso de datos del complemento, vea Datos de complemento y la clase RealTimeStylus . Para obtener más información sobre el control de errores, vea Consideraciones de control de errores para las API de StylusInput y la sección Datos de error de datos de complemento y la clase RealTimeStylus.

Nota

Se debe adjuntar al menos un complemento al objeto RealTimeStylus antes de que se pueda habilitar el objeto RealTimeStylus .

 

En los temas siguientes se describen algunas categorías comunes de complementos.

Consideraciones especiales

Debido a la naturaleza compleja del objeto RealTimeStylus , debe tomar nota de lo siguiente.

El objeto RealTimeStylus produce una excepción si un complemento modifica la colección de complementos a la que está asociada. Esto sucede solo cuando el complemento lo hace mientras el objeto RealTimeStylus lo llama como miembro de esa colección.

El siguiente ejemplo de C# es código que hace que el objeto RealTimeStylus produzca una excepción.

using Microsoft.Ink;
using Microsoft.StylusInput;
using Microsoft.StylusInput.PluginData;

// ...
public class thePlugin : Microsoft.StylusInput.IStylusAsyncPlugin
{
    // ...

    // Called when a system gesture occurs.
    public void SystemGesture(RealTimeStylus sender, SystemGestureData data)
    {
        // The following line will cause the realtime stylus that calls this method
        // to throw an exception.
        sender.Dispose();
    }
    
    // ...
}

El objeto RealTimeStylus produce una excepción si un complemento llama al método Dispose del objeto RealTimeStylus. Esto sucede solo cuando el complemento lo hace mientras el objeto RealTimeStylus lo llama.

El siguiente ejemplo de C# es código que hace que el objeto RealTimeStylus produzca una excepción.

using Microsoft.Ink;
using Microsoft.StylusInput;
using Microsoft.StylusInput.PluginData;

// ...
public class thePlugin : Microsoft.StylusInput.IStylusAsyncPlugin
{
    Microsoft.StylusInput.GestureRecognizer theGestureRecognizer;

    // ...

    // Called when a system gesture occurs.
    public void SystemGesture(RealTimeStylus sender, SystemGestureData data)
    {
        // The following line will cause the realtime stylus that calls this method
        // to throw an exception.
        sender.AsyncPluginCollection.Add(this.theGestureRecognizer);
    }
    
    // ...
}

Las colecciones de complementos se pueden modificar mientras el objeto RealTimeStylus está habilitado; Sin embargo, esto puede hacer que el comportamiento de la aplicación sea más difícil de predecir. Cuando se agrega un complemento mientras se habilita el objeto RealTimeStylus , el objeto RealTimeStylus llama al método IStylusAsyncPlugin.RealTimeStylusEnabled o IStylusSyncPlugin.RealTimeStylusEnabled . Cuando se quita un complemento mientras el objeto RealTimeStylus está habilitado, el objeto RealTimeStylus llama al método IStylusAsyncPlugin.RealTimeStylusDisabled o IStylusSyncPlugin.RealTimeStylusDisabled del complemento. Esto permite que el complemento mantenga su estado adecuado sin tener que comprobar la propiedad Enabled del objeto RealTimeStylus .

Cuando se agrega un complemento mientras el objeto RealTimeStylus está habilitado, los datos del complemento que recibe el complemento pueden no contener suficiente información para establecer adecuadamente el contexto de los datos iniciales. Por ejemplo, el complemento recién agregado podría empezar a recibir datos de paquetes de un lápiz que es un trazo medio. De forma similar, cuando se quita un complemento mientras el objeto RealTimeStylus está habilitado, los datos del complemento que el complemento ha recibido pueden ser insuficientes para finalizar el procesamiento de los datos.

Nota

Para la estabilidad general, se llama al método RealTimeStylusEnabled o RealTimeStylusDisabled de un complemento.

 

El modelo Cascaded RealTimeStylus

Consideraciones de control de errores para las API de StylusInput

Datos de complementos y clase RealTimeStylus

Consideraciones sobre subprocesos para las API de StylusInput