Freigeben über


Allgemeine Überlegungen zum Threading

Im Folgenden finden Sie allgemeine Threadingüberlegungen bei der Entwicklung für Tablet-PCs.

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.

Eingabebereichsereignisse des Stifts

PenInputPanel-Ereignisse werden für den Thread ausgelöst, in dem das PenInputPanel-Objekt erstellt wird.

Microsoft.Ink.InkCollector.DynamicRendering

Microsoft.Ink.InkOverlay.DynamicRendering

Microsoft.Ink.InkPicture.DynamicRendering

Microsoft.Ink.InkCollector.AutoRedraw

Microsoft.Ink.InkOverlay.AutoRedraw

Microsoft.Ink.InkPicture.AutoRedraw