Partager via


Plug-ins et classe RealTimeStylus

L’objet RealTimeStylus est conçu pour fournir un accès en temps réel au flux de données à partir du stylet tablette. Les plug-ins, objets qui implémentent l’interface IStylusSyncPlugin ou IStylusAsyncPlugin , peuvent être ajoutés à un objet RealTimeStylus . Les plug-ins synchrones sont généralement appelés directement par l’objet RealTimeStylus sur un thread de haute priorité, tandis que les plug-ins asynchrones sont généralement appelés sur le thread d’interface utilisateur de l’application. Créez ou utilisez des plug-ins synchrones pour les tâches qui nécessitent un accès en temps réel au flux de données et qui ne sont pas exigeantes en matière de calcul, telles que le filtrage de paquets. Créez ou utilisez des plug-ins asynchrones pour les tâches qui ne nécessitent pas d’accès en temps réel au flux de données, comme la collecte d’encre.

Certaines tâches peuvent être exigeantes sur le point de vue du calcul, mais nécessitent un accès en temps réel au flux de données, comme la reconnaissance de mouvements en plusieurs séquences. Pour répondre à ces besoins, les API StylusInput fournissent un modèle RealTimeStylus en cascade qui vous permet d’utiliser deux objets RealTimeStylus , chacun s’exécutant sur son propre thread. Pour plus d’informations sur le modèle RealTimeStylus en cascade, consultez Le modèle RealTimeStylus en cascade.

Les interfaces IStylusSyncPlugin et IStylusAsyncPlugin définissent les mêmes méthodes. Ces méthodes permettent à l’objet RealTimeStylus de transmettre les données du stylet à chaque plug-in, qu’il s’agisse d’un plug-in asynchrone ou synchrone. Les propriétés Microsoft.StylusInput.IStylusSyncPlugin.DataInterest et Microsoft.StylusInput.IStylusAsyncPlugin.DataInterest permettent à chaque plug-in de s’abonner à des données spécifiques dans le flux de données du stylet de tablette. Un plug-in ne doit s’abonner qu’aux données nécessaires à l’exécution de sa tâche, ce qui réduit les exigences de performances. Pour plus d’informations sur le threading et la classe RealTimeStylus , consultez Considérations relatives au thread pour les API StylusInput.

L’objet RealTimeStylus utilise des objets dans l’espace de noms Microsoft.StylusInput.PluginData pour passer les données du stylet à ses plug-ins. RealTimeStylus intercepte également les exceptions levées par les plug-ins. Lorsque RealTimeStylus intercepte des exceptions, il avertit les plug-ins en appelant la méthode IStylusSyncPlugin.Error ou IStylusAsyncPlugin.Error . Pour plus d’informations sur l’utilisation des données de plug-in, consultez Données de plug-in et la classe RealTimeStylus . Pour plus d’informations sur la gestion des erreurs, consultez Considérations relatives à la gestion des erreurs pour les API StylusInput et la section Données d’erreur des données de plug-in et de la classe RealTimeStylus.

Notes

Au moins un plug-in doit être attaché à l’objet RealTimeStylus avant que l’objet RealTimeStylus puisse être activé.

 

Les rubriques suivantes décrivent certaines catégories courantes de plug-ins.

Points particuliers à prendre en compte

En raison de la nature complexe de l’objet RealTimeStylus , vous devez prendre note de ce qui suit.

L’objet RealTimeStylus lève une exception si un plug-in modifie la collection de plug-ins à laquelle il est attaché. Cela se produit uniquement lorsque le plug-in le fait alors qu’il est appelé par l’objet RealTimeStylus en tant que membre de cette collection.

L’exemple C# suivant est du code qui provoque la levée d’une exception par l’objet RealTimeStylus .

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();
    }
    
    // ...
}

L’objet RealTimeStylus lève une exception si un plug-in appelle la méthode Dispose de l’objet RealTimeStylus. Cela se produit uniquement lorsque le plug-in le fait alors qu’il est appelé par l’objet RealTimeStylus .

L’exemple C# suivant est du code qui provoque la levée d’une exception par l’objet RealTimeStylus .

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);
    }
    
    // ...
}

Les collections de plug-ins peuvent être modifiées lorsque l’objet RealTimeStylus est activé ; Toutefois, cela peut rendre le comportement de votre application plus difficile à prédire. Lorsqu’un plug-in est ajouté alors que l’objet RealTimeStylus est activé, l’objet RealTimeStylus appelle la méthode IStylusAsyncPlugin.RealTimeStylusEnabled ou IStylusSyncPlugin.RealTimeStylusEnabled du plug-in. Lorsqu’un plug-in est supprimé alors que l’objet RealTimeStylus est activé, l’objet RealTimeStylus appelle la méthode IStylusAsyncPlugin.RealTimeStylusDisabled ou IStylusSyncPlugin.RealTimeStylusDisabled du plug-in. Cela permet au plug-in de conserver son état correct sans avoir à case activée la propriété Enabled de l’objet RealTimeStylus.

Lorsqu’un plug-in est ajouté alors que l’objet RealTimeStylus est activé, les données de plug-in reçues par le plug-in peuvent ne pas contenir suffisamment d’informations pour établir correctement le contexte des données initiales. Par exemple, le plug-in nouvellement ajouté peut commencer à recevoir des données de paquet à partir d’un stylet qui est mi-trait. De même, lorsqu’un plug-in a été supprimé alors que l’objet RealTimeStylus est activé, les données de plug-in reçues par le plug-in peuvent être insuffisantes pour terminer le traitement des données.

Notes

Pour une stabilité globale, réinitialisez l’état interne d’un plug-in lorsque sa méthode RealTimeStylusEnabled ou RealTimeStylusDisabled est appelée.

 

Modèle RealTimeStylus en cascade

Considérations relatives à la gestion des erreurs pour les API StylusInput

Données de plug-in et classe RealTimeStylus

Considérations relatives aux threads pour les API StylusInput