Plug-Ins und die RealTimeStylus-Klasse

Das RealTimeStylus-Objekt ist für den Echtzeitzugriff auf den Datenstrom vom Tablet-Stift aus konzipiert. Plug-Ins, Objekte, die die IStylusSyncPlugin - oder IStylusAsyncPlugin-Schnittstelle implementieren, können einem RealTimeStylus-Objekt hinzugefügt werden. Synchrone Plug-Ins werden im Allgemeinen direkt vom RealTimeStylus-Objekt in einem Thread mit hoher Priorität aufgerufen, während asynchrone Plug-Ins im Allgemeinen im Benutzeroberflächenthread der Anwendung aufgerufen werden. Erstellen oder verwenden Sie synchrone Plug-Ins für Aufgaben, die Echtzeitzugriff auf den Datenstrom erfordern und rechnerisch anspruchslos sind, z. B. Paketfilterung. Erstellen oder verwenden Sie asynchrone Plug-Ins für Aufgaben, die keinen Echtzeitzugriff auf den Datenstrom erfordern, z. B. die Freihandsammlung.

Bestimmte Aufgaben sind möglicherweise rechenintensiv, erfordern aber echtzeitbasierten Zugriff auf den Datenstrom, z. B. die Erkennung mehrerer Gesten. Um diese Anforderungen zu erfüllen, stellen die StylusInput-APIs ein kaskadiertes RealTimeStylus-Modell bereit, mit dem Sie zwei RealTimeStylus-Objekte verwenden können, die jeweils in einem eigenen Thread ausgeführt werden. Weitere Informationen zum kaskadierten RealTimeStylus-Modell finden Sie unter Das kaskadierte RealTimeStylus-Modell.

Sowohl die IStylusSyncPlugin - als auch die IStylusAsyncPlugin-Schnittstelle definieren die gleichen Methoden. Diese Methoden ermöglichen es dem RealTimeStylus-Objekt , die Stiftdaten an jedes Plug-In zu übergeben, unabhängig davon, ob es sich um ein asynchrones oder synchrones Plug-In handelt. Mit den Eigenschaften Microsoft.StylusInput.IStylusSyncPlugin.DataInterest und Microsoft.StylusInput.IStylusAsyncPlugin.DataInterest kann jedes Plug-In bestimmte Daten im Tablet-Stiftdatenstrom abonnieren. Ein Plug-In sollte nur die Daten abonnieren, die für die Ausführung seiner Aufgabe erforderlich sind, um die Leistungsanforderungen zu minimieren. Weitere Informationen zum Threading und zur RealTimeStylus-Klasse finden Sie unter Überlegungen zum Threading für die StylusInput-APIs.

Das RealTimeStylus-Objekt verwendet Objekte im Microsoft.StylusInput.PluginData-Namespace , um die Stiftdaten an seine Plug-Ins zu übergeben. RealTimeStylus fängt auch Ausnahmen ab, die von Plug-Ins ausgelöst werden. Wenn RealTimeStylus Ausnahmen abfangen, benachrichtigt er die Plug-Ins durch Aufrufen der IStylusSyncPlugin.Error - oder IStylusAsyncPlugin.Error-Methode . Weitere Informationen zur Verwendung von Plug-In-Daten finden Sie unter Plug-In-Daten und die RealTimeStylus-Klasse . Weitere Informationen zur Fehlerbehandlung finden Sie unter Überlegungen zur Fehlerbehandlung für die StylusInput-APIs und im Abschnitt Fehlerdaten der Plug-In-Daten und der RealTimeStylus-Klasse.

Hinweis

Es muss mindestens ein Plug-In an das RealTimeStylus-Objekt angefügt werden, bevor das RealTimeStylus-Objekt aktiviert werden kann.

 

In den folgenden Themen werden einige allgemeine Kategorien von Plug-Ins beschrieben.

Besondere Überlegungen

Aufgrund der komplexen Natur des RealTimeStylus-Objekts sollten Sie Folgendes beachten.

Das RealTimeStylus-Objekt löst eine Ausnahme aus, wenn ein Plug-In die Plug-In-Auflistung ändert, an die es angefügt ist. Dies geschieht nur, wenn das Plug-In dies tut, während es vom RealTimeStylus-Objekt als Member dieser Auflistung aufgerufen wird.

Das folgende C#-Beispiel ist Code, der bewirkt, dass das RealTimeStylus-Objekt eine Ausnahme auslöst.

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

Das RealTimeStylus-Objekt löst eine Ausnahme aus, wenn ein Plug-In die Dispose-Methode des RealTimeStylus-Objekts aufruft. Dies geschieht nur, wenn das Plug-In dies tut, während es vom RealTimeStylus-Objekt aufgerufen wird.

Das folgende C#-Beispiel ist Code, der bewirkt, dass das RealTimeStylus-Objekt eine Ausnahme auslöst.

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

Plug-In-Auflistungen können geändert werden, während das RealTimeStylus-Objekt aktiviert ist. Dies kann jedoch dazu führen, dass das Verhalten Ihrer Anwendung schwieriger vorhergesagt werden kann. Wenn ein Plug-In hinzugefügt wird, während das RealTimeStylus-Objekt aktiviert ist, ruft das RealTimeStylus-Objekt die IStylusAsyncPlugin.RealTimeStylusEnabled - oder IStylusSyncPlugin.RealTimeStylusEnabled-Methode des Plug-Ins auf. Wenn ein Plug-In entfernt wird, während das RealTimeStylus-Objekt aktiviert ist, ruft das RealTimeStylus-Objekt die IStylusAsyncPlugin.RealTimeStylusDisabled - oder IStylusSyncPlugin.RealTimeStylusDisabled-Methode des Plug-Ins auf. Dadurch kann das Plug-In seinen ordnungsgemäßen Zustand beibehalten, ohne die Enabled-Eigenschaft des RealTimeStylus-Objekts überprüfen zu müssen.

Wenn ein Plug-In hinzugefügt wird, während das RealTimeStylus-Objekt aktiviert ist, enthalten die Plug-In-Daten, die das Plug-In empfängt, möglicherweise nicht genügend Informationen, um den Kontext der anfänglichen Daten angemessen festzulegen. Beispielsweise könnte das neu hinzugefügte Plug-In damit beginnen, Paketdaten von einem Stift zu empfangen, der mitten im Strich ist. Wenn ein Plug-In entfernt wird, während das RealTimeStylus-Objekt aktiviert ist, können die vom Plug-In empfangenen Plug-In-Daten möglicherweise nicht ausreichen, um die Verarbeitung der Daten abzuschließen.

Hinweis

Setzen Sie den internen Zustand eines Plug-Ins zurück, wenn entweder die RealTimeStylusEnabled - oder RealTimeStylusDisabled-Methode aufgerufen wird.

 

Das kaskadierte RealTimeStylus-Modell

Überlegungen zur Fehlerbehandlung für die StylusInput-APIs

Plug-In-Daten und die RealTimeStylus-Klasse

Überlegungen zum Threading für die StylusInput-APIs