Architektur der StylusInput-APIs

Mit den StylusInput-APIs können Sie mit dem Datenstrom des Tablettstifts interagieren. Um mit dem Datenstrom zu interagieren, fügen Sie Ihrer Anwendung ein RealTimeStylus-Objekt und dem RealTimeStylus-Objekt Plug-Ins hinzu.

In den StylusInput-APIs werden zwei Plug-Ins bereitgestellt. Das DynamicRenderer-Objekt implementiert die IStylusSyncPlugin-Schnittstelle. Das DynamicRenderer-Objekt rendert die Ink in Echtzeit, während sie gezeichnet wird. Das GestureRecognizer-Objekt implementiert die Schnittstellen IStylusSyncPlugin und IStylusAsyncPlugin. Das GestureRecognizer-Objekt erkennt Anwendungsgesten.

Definitionen

Die folgenden Begriffe werden in den Abschnitten verwendet, in denen die StylusInput-APIs beschrieben werden:

Synchrones Plug-In

Eine Klasse, die die IStylusSyncPlugin-Schnittstelle implementiert. Synchrone Plug-Ins werden im Allgemeinen direkt vom RealTimeStylus-Objekt aufgerufen.

Asynchrones Plug-In

Eine Klasse, die die IStylusAsyncPlugin-Schnittstelle implementiert. Asynchrone Plug-Ins werden im Allgemeinen für den Benutzeroberflächenthread der Anwendung aufgerufen.

Synchrone Plug-In-Sammlung

Eine StylusSyncPluginCollection-Sammlung, bei der es sich um eine geordnete Sammlung von IStylusSyncPlugin-Objekten handelt. Eine synchrone Plug-In-Sammlung bezieht sich in der Regel auf die Sammlung, die der SyncPluginCollection-Eigenschaft eines RealTimeStylus-Objekts zugewiesen ist. Nur synchrone Plug-Ins können einer synchronen Plug-In-Auflistung hinzugefügt werden.

Asynchrone Plug-In-Auflistung

Eine StylusAsyncPluginCollection-Auflistung, bei der es sich um eine geordnete Sammlung von IStylusAsyncPlugin-Objekten handelt. Eine asynchrone Plug-In-Auflistung bezieht sich in der Regel auf die Sammlung, die der AsyncPluginCollection-Eigenschaft eines RealTimeStylus-Objekts zugewiesen ist. Einer asynchronen Plug-In-Auflistung können nur asynchrone Plug-Ins hinzugefügt werden.

Synchrone und asynchrone Plug-Ins

Das RealTimeStylus-Objekt ist für den Echtzeitzugriff auf den Datenstrom über einen Tablettstift konzipiert. Erstellen oder verwenden Sie synchrone Plug-Ins für Aufgaben, die Echtzeitzugriff auf den Datenstrom erfordern und berechnungsbasiertes Undemanding durchführen, z. B. für die Paketfilterung. Erstellen oder verwenden Sie asynchrone Plug-Ins für Aufgaben, die keinen Echtzeitzugriff auf den Datenstrom erfordern, z. B. zum Erstellen und Speichern von Strichen in einem InkDisp-Objekt.

Bestimmte Aufgaben können rechenintensiv sein, erfordern jedoch Echtzeitzugriff auf den Datenstrom, z. B. die Erkennung von Multistrokegesten. Um diese Anforderungen zu erfüllen, bieten die StylusInput-APIs ein kaskadiertes RealTimeStylus-Modell, 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.

Weitere Informationen zum Verwenden und Erstellen von Plug-Ins finden Sie unter Arbeiten mit den StylusInput-APIs.

Der Tablettstift-Datenstrom

Das RealTimeStylus-Objekt verfügt über zwei interne Warteschlangen, die die Tablettstiftdaten, die Eingabewarteschlange und die Ausgabewarteschlange, tragen. Die Stiftdaten werden in Instanzen der Klassen im Microsoft.StylusInput.PluginData-Namespace konvertiert. In der folgenden Liste wird beschrieben, wie das RealTimeStylus-Objekt die Tablettstiftdaten behandelt:

Das RealTimeStylus-Objekt sucht zuerst in der Eingabewarteschlange nach Plug-In-Datenobjekten und anschließend aus dem Datenstrom des Tablettstifts.

Das RealTimeStylus-Objekt sendet ein Plug-In-Datenobjekt an die Objekte in seiner synchronen Plug-In-Auflistung. Jedes synchrone Plug-In kann der Eingabe- oder Ausgabewarteschlange Daten hinzufügen.

Nachdem das Plug-In-Datenobjekt an alle Member der synchronen Plug-In-Sammlung gesendet wurde, wird das Plug-In-Datenobjekt in der Ausgabewarteschlange des RealTimeStylus-Objekts platziert.

Das RealTimeStylus-Objekt sucht dann nach dem nächsten zu verarbeitenden Plug-In-Datenobjekt.

Während die Ausgabewarteschlange des RealTimeStylus-Objekts Daten enthält, sendet das RealTimeStylus-Objekt ein Plug-In-Datenobjekt aus seiner Ausgabewarteschlange an die Objekte in seiner asynchronen Plug-In-Auflistung. Jedes asynchrone Plug-In kann der Eingabe- oder Ausgabewarteschlange Daten hinzufügen. Da die asynchronen Plug-Ins jedoch im UI-Thread ausgeführt werden, werden die Daten der Warteschlange in Bezug auf die aktuellen Stiftdaten hinzugefügt, die das RealTimeStylus-Objekt verarbeitet, und nicht in Bezug auf die Daten, die das asynchrone Plug-In verarbeitet.

Das folgende Diagramm veranschaulicht den Fluss von Tablettstiftdaten durch das RealTimeStylus-Objekt und seine Plug-In-Sammlungen.

Fluss von Tablettstiftdaten durch das Realtimestylus-Objekt und seine Plug-In-Sammlungen

In diesem Diagramm stellen die Kreise mit den Bezeichnungen "A" und "B" Tablettstiftdaten dar, die der Ausgabewarteschlange des RealTimeStylus-Objekts bereits hinzugefügt wurden und noch nicht an die asynchrone Plug-In-Sammlung gesendet wurden. Der Kreis mit der Bezeichnung "C" stellt die Tablettstiftdaten dar, die das RealTimeStylus-Objekt derzeit verarbeitet. Sie wird an die synchrone Plug-In-Sammlung gesendet und in der Ausgabewarteschlange platziert. Der leere Kreis stellt die Position in der Ausgabewarteschlange dar, an der zukünftige Tablettstiftdaten hinzugefügt werden.

Weitere Informationen dazu, wie bestimmte Daten der Warteschlange hinzugefügt und verarbeitet werden, finden Sie unter Plug-In-Daten und die RealTimeStylus-Klasse.

Die StylusInput-APIs

Die StylusInput-APIs befinden sich hauptsächlich in den Namespaces Microsoft.StylusInput und Microsoft.StylusInput.PluginData. Die StylusInput-APIs verweisen jedoch auch auf einige Klassen im Microsoft.Ink-Namespace, z. B. die Tablet-Klasse, die TabletPropertyDescriptionCollection-Auflistung und die ApplicationGesture- und SystemGesture-Enumerationen.

DynamicRenderer

GestureRecognizer

Realtimestylus

Istylusasyncplugin

Istylussyncplugin

Arbeiten mit den StylusInput-APIs

Das kaskadierte RealTimeStylus-Modell