2009-07-18 5 views

Répondre

3

Les contrôles utilisateur doivent s'exécuter sur le thread d'interface utilisateur car il s'agit d'une restriction dans l'API Windows. Si vous essayez d'utiliser les contrôles Windows Forms d'un autre thread, vous obtiendrez une exception.

Vous pouvez exécuter un autre code dans un autre thread, mais utilisez le thread d'interface utilisateur pour mettre à jour les contrôles. Vous pouvez utiliser BackgroundWorker pour cela. Ou vous pouvez utiliser les méthodes InvokeRequired et Invoke ou BeginInvoke sur l'instance de contrôle pour faire exécuter du code sur le thread d'interface utilisateur.


Vous mentionnez que vous souhaitez utiliser un verrou mutex. Un mutex permet d'éviter que plusieurs threads accèdent à une ressource en même temps. Si tout votre code s'exécute dans le même thread, vous n'avez pas besoin de verrou du tout.

2

objets ne sont pas vraiment « run » eux-mêmes - les méthodes sont exécutées sur un fil. Maintenant, si vous voulez qu'une méthode particulière s'exécute dans un thread différent, vous devez soit créer un nouveau thread, soit utiliser explicitement le pool de threads, soit utiliser quelque chose qui utilise le threadpool pour vous - tel que BackgroundWorker.

Que faites-vous lorsque vous voulez dormir pendant deux minutes? Pourriez-vous éviter de dormir en plaçant simplement une minuterie à feu (dans le fil de l'interface utilisateur) dans deux minutes à la place? Si cela fait partie d'un processus de longue durée, vous devez utiliser BackgroundWorker ou un autre moyen d'exécution sur un thread différent, mais le contrôle lui-même gère toujours les mises à jour et les événements sur le thread de l'interface utilisateur.

Questions connexes