Allgemeine Überlegungen zum Threading
Im Folgenden finden Sie allgemeine Überlegungen zum Threading bei der Entwicklung für Tablet PC.
- Anwendungsthreads und Nichtanwendungsthreads
- Leistungsaspekte
- Überlegungen zum Ereignisthreading
- Zugehörige Themen
Anwendungsthreads und Nichtanwendungsthreads
Alle Ink-Ereignisse werden in einem separaten Ink-Thread mit hoher Priorität generiert. Dies ermöglicht einen reibungslosen Fluss der Ink-Funktion, auch wenn eine Anwendung langsam ausgeführt wird. Ereignishandler können jedoch das Rendern von Ink verlangsamen oder blockieren.
Alle Erkennungsereignisse, die von Methodenaufrufen der Hintergrunderkennung generiert werden, werden in einem separaten Hintergrunderkennungsthread mit normaler Priorität behandelt.
Alle Mausereignisse werden im Hauptthread der Benutzeroberfläche der Anwendung generiert.
Überlegungen zur Leistung
Ereignishandler
Die Anwendungsprogrammierschnittstelle (Application Programming Interface, API) der Tablet PC-Plattform verfügt über ein interaktives Modell für Ereignisse und nicht über ein Benachrichtigungsmodell. Halten Sie Code in Ereignishandlern kurz, um die Zeit zu reduzieren, die das Rendern von Ink-Daten blockiert. Die Sammlung von Ink durch den Tablet-PC wird nicht blockiert, aber Ihre Anwendung erhält die Ink nicht, während Ihre Anwendung blockiert ist.
AutoRedraw-Eigenschaft
Wenn Ihre Anwendung benutzerdefiniertes Rendering vorsteuert oder wenn Ihre Anwendung auf Probleme beim Malen reagieren kann, können Sie die Neuzeichnung selbst durchführen 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 Neupaintierung 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 Control.Invalidated- und Control.Paint-Ereignisse des InkPicture-Steuerelements. |
DynamicRendering-Eigenschaft
Wenn Ihre Anwendung benutzerdefiniertes Rendering vorsteuert oder wenn Sie die Informationen, aber nicht die Ink-Eigenschaft, verwenden möchten, können Sie die InkOverlay-Darstellung selbst verarbeiten und das Echtzeitrendering von InkPicture deaktivieren, indem Sie die DynamicRendering-Eigenschaft für das InkCollector-Objekt, das InkOverlay-Objekt oder das InkPicture-Steuerelement auf FALSE festlegen.
Überlegungen zum Ereignisthreading
Api-Ereignisse der Tablet PC-Plattform werden in verschiedenen Threads ausgelöst.
InkCollector- und InkOverlay Objects-Ereignisse
Die meisten InkCollector- und InkOverlay-Objektereignisse werden im Ink-Thread ausgelöst. Nur die Mausereignisse für diese Objekte werden im UI-Thread ausgelöst. Für das InkCollector-Objekt wird beispielsweise das MouseDown-Ereignis im UI-Thread ausgelöst, und das CursorDown-Ereignis wird im Ink-Thread ausgelöst.
Ink Object and Strokes Collection Events
Die Ink-Objekt- und Strokes-Auflistungsereignisse können aus dem Ink-Thread 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 Ink-Thread generiert.
Die Steuerelemente InkPicture und InkEdit arbeiten in einem Singlethread-Apartment (STA). 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 Ereignis Recognition (nur verwaltete Bibliothek) oder RecognitionResult (nur Automation) im UI-Thread aus.
- Die Methoden BackgroundRecognize und BackgroundRecognizeWithAlternates des RecognizerContext-Objekts heben die Ereignisse Recognition und RecognitionWithAlternates im Hintergrunderkennungsthread auf.
Stifteingabebereichsereignisse
PenInputPanel-Ereignisse werden in dem Thread ausgelöst, in dem das PenInputPanel-Objekt erstellt wird.