Lorsque je crée un formulaire Windows simple, commence-t-il automatiquement dans un nouveau fil? Ou il n'y a qu'un seul fil pour toutes les formes?Filetage pour formulaire Windows
Répondre
Il y a un fil pour toutes les formes.
En fait, Windows Forms (et la plupart des technologies de fenêtrage), nécessitent que tous vos formulaires et contrôles soient générés sur un seul thread. Si vous essayez d'utiliser un contrôle provenant d'un thread différent, cela causera un problème.
L'unité d'exécution de l'interface utilisateur d'une application Windows passe en réalité la majeure partie de son temps inactive. Une file d'attente de messages est traitée et provoque le déclenchement des événements que vous gérez. Si vous souhaitez accéder à l'interface utilisateur à partir d'un autre thread, vous devez appeler (en utilisant Control.Invoke) la méthode que vous souhaitez exécuter sur le thread de l'interface utilisateur, sinon vous recevrez des exceptions.
Non, Ce n'est qu'une file d'attente de messages. Les formulaires (windows) semblent être "multithread", mais il s'agit d'une file d'attente de messages/d'une pompe de message qui traite les messages. (donc c'est 1 thread ...)
Si vous ne faites rien de plus, toutes les formes partagent le même thread d'interface utilisateur (je suppose que c'est ce que vous faites référence)
Toutefois, si vous utilisez wpf, vous pouvez avoir un thread ui distinct pour chaque formulaire. Voir cet article pour plus de détails: http://eprystupa.wordpress.com/2008/07/28/running-wpf-application-with-multiple-ui-threads/ – anchandra
Il est techniquement possible de le faire aussi dans Windows Forms - Il suffit d'avoir plusieurs appels Application.Run dans les threads STA - mais ce n'est généralement pas nécessaire ou une bonne idée, IMO. –
- 1. Filetage C# et Windows Forms
- 2. Filetage sur Windows et Linux
- 3. Besoin d'aide pour le filetage -C# Windows Forms
- 4. Problème dans le filetage
- 5. Filetage de base Question
- 6. Zoom pour un formulaire Windows en C#
- 7. Filetage pour les éléments iframe dans IE
- 8. asp: minuterie avec filetage
- 9. Filetage et noyaux
- 10. Le paradigme du filetage?
- 11. Nhibernate avec Windows formulaire
- 12. Rotation de formulaire Windows
- 13. Windows formulaire de demande
- 14. allocation de filetage CUDA
- 15. formulaire manquant après Minimisez - application formulaire Windows
- 16. Filetage ASP.NET & AJAX
- 17. Filetage en utilisant AJAX
- 18. Problème de filetage iPhone
- 19. futur accord/filetage
- 20. Windows Terminal - Windows Formulaire à intégrer cmd
- 21. minuterie sur le filetage?
- 22. Filetage en C#
- 23. c comportement # filetage
- 24. python tordu filetage
- 25. filetage .NET question
- 26. Filetage C# - Verrouiller l'objet
- 27. 'sys.excepthook' et le filetage
- 28. Filetage dans C#
- 29. Filetage de messagerie
- 30. Helgrind pour Windows?
Qu'est-ce que ce code va faire? \t \t nouvelle discussion (nouveau ThreadStart (délégué() \t \t { \t \t \t forme f = nouveau formulaire(); \t \t \t f.Show();} \t \t)). Démarrer(); –
Comme je l'ai commenté dans un autre post - vous pouvez le faire. Cependant, votre code, comme ci-dessus, provoquera une énorme quantité d'instabilité, et probablement crash. Si vous voulez faire cela, vous devriez faire Application.Run (new Form1()) à l'intérieur du thread, ET assurez-vous que le thread est défini sur l'état d'appartement Single Thread avant d'appeler Start. Si vous faites cela, vous pouvez démarrer une nouvelle pompe de message sur un thread secondaire et l'exécuter. Ce n'est simplement pas la façon de travailler «normale» ou une bonne pratique. –
Chaque fenêtre a une affinité avec le thread qui l'a créée - tout le traitement des messages pour la fenêtre aura lieu dans ce thread, et certains toolkits de widgets (y compris WinForms) limitent sévèrement les opérations effectuées à partir d'autres threads. Mais accéder à partir du thread qui a créé la fenêtre est considérablement plus flexible que d'avoir un seul thread d'interface utilisateur. –