Allgemeine Überlegungen zum Threading
Im Folgenden finden Sie allgemeine Threadingüberlegungen bei der Entwicklung für Tablet-PCs.
- Anwendungs- und Nichtanwendungsthreads
- Leistungsaspekte
- Überlegungen zum Ereignisthreading
- Zugehörige Themen
Anwendungs- und Nichtanwendungsthreads
Alle Freihandereignisse werden in einem separaten Freihandthread mit hoher Priorität generiert. Dadurch kann die Freihandeingabe auch dann reibungslos fließen, wenn eine Anwendung langsam ausgeführt wird. Ereignishandler können das Rendern von Freihand jedoch verlangsamen oder blockieren.
Alle Erkennungsereignisse, die von Aufrufen der Hintergrunderkennungsmethode generiert werden, werden in einem separaten Hintergrunderkennungsthread mit normaler Priorität behandelt.
Alle Mausereignisse werden im Standard Benutzeroberflächenthread der Anwendung generiert.
Überlegungen zur Leistung
Ereignishandler
Die Anwendungsprogrammierschnittstelle (APPLICATION Programming Interface, API) von Tablet PC Platform verfügt nicht über ein Benachrichtigungsmodell, sondern über ein interaktives Modell für Ereignisse. Halten Sie Code in Ereignishandlern kurz, um die Zeit zu verkürzen, in der das Rendering von Freihand blockiert wird. Die Sammlung von Freihandeingaben durch den Tablet-PC ist nicht blockiert, aber Ihre Anwendung empfängt die Freihandeingabe nicht, während Ihre Anwendung blockiert ist.
AutoRedraw-Eigenschaft
Wenn Ihre Anwendung benutzerdefiniertes Rendering ausführt oder Ihre Anwendung probleme beim Zeichnen berücksichtigt, können Sie die Neulackierung selbst behandeln und die AutoRedraw-Eigenschaft für das InkCollector-Objekt, das InkOverlay-Objekt oder das InkPicture-Steuerelement auf FALSE festlegen. Verwenden Sie die Ereignisse in der folgenden Tabelle, um die Neulackierung zu behandeln.
Objekt oder Steuerelement | Ereignis |
---|---|
Inkcollector Objekt |
Die Ereignisse Control.Invalidated und Control.Paint des zugrunde liegenden Steuerelements. |
Inkoverlay Objekt |
Die Ereignisse Control.Invalidated und Control.Paint des zugrunde liegenden Steuerelements. |
Inkpicture Steuerung |
Die geerbten Ereignisse Control.Invalidated und Control.Paint des InkPicture-Steuerelements. |
DynamicRendering-Eigenschaft
Wenn Ihre Anwendung benutzerdefiniertes Rendering ausführt oder wenn Sie die Informationen, aber nicht die Freihandeingabe möchten, können Sie die Freihandeingabe selbst verarbeiten und das Echtzeitrendering der Freihandeingabe deaktivieren, indem Sie die DynamicRendering-Eigenschaft für das InkCollector-Objekt, das InkOverlay-Objekt oder das InkPicture-Steuerelement auf false festlegen.
Überlegungen zum Ereignisthreading
Ereignisse der Tablet-PC-Plattform-API werden in verschiedenen Threads ausgelöst.
InkCollector- und InkOverlay-Objektereignisse
Die meisten InkCollector - und InkOverlay-Objektereignisse werden im Freihandthread ausgelöst. Nur die Mausereignisse für diese Objekte werden im UI-Thread ausgelöst. Beispielsweise wird für das InkCollector-Objekt das MouseDown-Ereignis im UI-Thread ausgelöst, und das CursorDown-Ereignis wird im Freihandthread ausgelöst.
Ereignisse der Freihandobjekt- und Strokes-Auflistung
Das Ink-Objekt und die Strokes-Auflistungsereignisse können aus dem Freihandthread oder dem UI-Thread stammen. Wenn Ihre Anwendung das Ink-Objekt oder die Strokes-Auflistung bearbeitet, wird das Ereignis im UI-Thread generiert. Wenn der InkCollector oder das InkOverlay-Objekt das Ink-Objekt oder die Strokes-Auflistung aktualisiert, wird das Ereignis im Freihandthread generiert.
Die Steuerelemente InkPicture und InkEdit werden in einem Singlethread-Apartment (STA) ausgeführt. Wenn das InkPicture- oder InkEdit-Steuerelement das Ink-Objekt oder die Strokes-Auflistung aktualisiert, wird das Ereignis im UI-Thread ausgelöst.
Erkennungsereignisse
Erkennungsereignisse werden im UI-Thread oder im Hintergrunderkennungsthread ausgelöst.
- Die Recognize-Methode des InkEdit-Steuerelements löst das Recognition-Ereignis (nur verwaltete Bibliothek) oder RecognitionResult (nur Automation) im UI-Thread aus.
- Die BackgroundRecognize- und BackgroundRecognizeWithAlternates-Methoden des RecognizerContext-Objekts lösen die Ereignisse Recognition und RecognitionWithAlternates im Hintergrunderkennungsthread aus.
Eingabebereichsereignisse des Stifts
PenInputPanel-Ereignisse werden für den Thread ausgelöst, in dem das PenInputPanel-Objekt erstellt wird.