Supposons que j'ai l'événement button.Click
normal.Pourquoi le thread d'interface utilisateur est-il bloqué lors de l'exécution de quelque chose dans un thread différent?
Si j'essaie d'accéder à des éléments de l'interface utilisateur depuis l'intérieur de cet événement, je pourrais potentiellement avoir un comportement indésirable - ou même une exception (lors du débogage). L'exception habituelle dans un tel scénario est: ...cannot access UI elements from thread different than they were created in
.
Puisqu'il s'agit d'un autre thread (différent du principal), pourquoi mon interface utilisateur est-elle bloquée lorsque j'effectue des opérations fastidieuses dans un événement?
Comment pouvez-vous dire que certains événements s'exécutent dans le thread UI et d'autres pas? – pkolodziej
En lisant la documentation de l'événement. La plupart des événements liés à l'interface utilisateur se déclenchent sur le thread d'interface utilisateur. En cas de doute, vérifiez InvokeRequired. –
Si l'événement se déclenche dans le thread AUTRE que l'interface utilisateur, il n'empêche pas l'actualisation de la fenêtre, mais si elle se déclenche dans le thread UI, la fenêtre ne sera pas redessinée jusqu'à la fermeture de l'événement. – pkolodziej