Considérations relatives aux threads de bibliothèque managée
Les considérations suivantes relatives aux threads Tablet PC sont spécifiques à la bibliothèque managée.
- Sécurité des threads
- Applications STA et MTA
- considérations relatives aux threads Windows Forms
- Considérations relatives au Presse-papiers
- Exceptions dans les gestionnaires d’événements
- Élimination d’objets et de contrôles
- API StylusInput
Thread-Safety
Les classes de bibliothèque managée de la plateforme Tablet PC ne sont généralement pas thread-safe. Les collections suivantes sont thread-safe au niveau du membre ; Toutefois, ces collections ne garantissent pas la protection d’un énumérateur si un autre thread fonctionne simultanément sur la collection :
Applications STA et MTA
Les applications managées créées à l’aide des Assistants contenus dans Microsoft Visual Studio .NET sont par défaut sta (monothreaded apartment). Vous pouvez modifier l’appartement de votre application en définissant le thread STA ou l’attribut de thread d’appartement multithread (MTA) sur le point d’entrée de votre application.
Si votre application s’exécute dans un MTA, vous devez écrire du code thread-safe ; Toutefois, ce faisant, vous pouvez améliorer certains problèmes de performances de gestion des événements.
Pour plus d’informations sur le thread STA et les attributs de thread MTA, consultez la classe STAThreadAttribute et la classe MTAThreadAttribute .
considérations relatives aux threads Windows Forms
Les contrôles InkPicture et InkEdit étendent Windows Forms contrôles. Windows Forms contrôles utilisent le modèle STA (Single-Threaded Apartment), car Windows Forms sont basés sur des fenêtres Win32 natives qui sont intrinsèquement à thread unique. Dans le code managé, les contrôles manuscrits doivent être créés dans le même thread que le thread main pour le formulaire.
Dans une application STA, certains événements se produisent sur un thread autre que le thread d’interface utilisateur de l’application. Lorsque vous appelez un objet ou un contrôle Windows Forms, y compris les contrôles InkPicture et InkEdit, à partir d’un gestionnaire d’événements Tablet PC, utilisez la méthode Control.Invoke héritée de l’objet ou du contrôle. La propriété InvokeRequired , héritée de la classe Control, peut être utilisée pour déterminer si cela est nécessaire.
Par exemple, dans le gestionnaire d’événements suivant pour l’événement Recognition , la propriété InvokeRequired est testée et, si true, le gestionnaire d’événements est appelé à nouveau à partir du thread d’interface utilisateur.
void recoContext_Recognition(object sender,
RecognizerContextRecognitionEventArgs e)
{
if (InvokeRequired)
{
Invoke( new RecognizerContextRecognitionEventHandler(
recoContext_Recognition ),
new object[] { sender, e } );
return;
}
// Use the recognition result here.
}
Si vous placez un UserControl sur une pageweb dans un navigateur (voir Contrôles web), il s’exécute en tant qu’application STA. Pour les applications clientes intelligentes (consultez Déploiement sans touche), le développeur a un contrôle total sur apartmentState. (La valeur par défaut est généralement STA, mais peut être MTA, en fonction de votre version de CLR.) Pour les problèmes de threading impliquant RealTimeStylus, consultez Considérations relatives au thread pour les API StylusInput.
Pour plus d’informations sur l’appel de Windows Forms à partir d’une application MTA, consultez Exemple de contrôle Windows Forms multithread.
Considérations relatives au Presse-papiers
L’objet Presse-papiers fonctionne uniquement à partir d’un thread STA. Lorsque vous essayez de copier ou de coller dans le Presse-papiers à partir d’un thread qui n’est pas STA, vous obtenez une ThreadStateException. Si votre application est MTA, créez un thread STA pour gérer les appels de méthode du Presse-papiers et certains des autres aspects de l’interface utilisateur de votre application.
Exceptions dans les gestionnaires d’événements
Les exceptions ne peuvent pas être levées à partir des gestionnaires d’événements Tablet PC. Par exemple, si un délégué de gestionnaire d’événements pour un objet ou une collection Tablet PC a trois gestionnaires inscrits et que le premier lève une exception, la séquence suivante se produit :
- Le premier gestionnaire se ferme.
- L’exception est perdue.
- Les gestionnaires restants ne sont pas appelés.
Élimination d’objets et de contrôles
Pour éviter une fuite de mémoire, vous devez appeler explicitement la méthode Dispose sur n’importe quel objet tablet PC ou contrôle auquel un gestionnaire d’événements a été attaché avant que l’objet ou le contrôle ne sorte de l’étendue.
Pour améliorer les performances de votre application, supprimez manuellement tout objet ou contrôle Tablet PC qui implémente la méthode Dispose lorsque l’objet ou le contrôle n’est plus nécessaire.
API StylusInput
Pour plus d’informations sur les considérations relatives au threading pour l’objet RealTimeStylus et les interfaces de programmation d’application (API) StylusInput, consultez Considérations relatives aux threads pour les API StylusInput.