Je suppose qu'il est possible de le faire car des programmes comme google chrome ont été améliorés et ont placé chaque onglet dans un processus séparé. Alors, comment puis-je mettre un contrôle GUI tel que datagridview sur un thread séparé?Mettez un contrôle GUI sur un thread différent?
Répondre
Je ne pense pas que vous aurez besoin d'un fil pour chaque commande unique sinon vous aurez un grand nombre de threads et vous pouvez commencer à courir dans toutes sortes d'ennuis.
est ici quelques sites Web pour vous aider à démarrer: http://www.albahari.com/threading/
http://msdn.microsoft.com/en-us/library/aa645740(VS.71).aspx
Je crois que n'est pas possible ... Pour modifier une commande (par exemple en ajoutant un enfant à elle.) , vous devez être sur le même thread qui a créé le parent. Par conséquent, votre contrôle enfant devrait être créé par le même thread qui a créé son parent.
Les éléments que je me souviens avoir vu créé sur différents threads sont dialogues permanents et autres, mais cela n'est possible parce que les dialogues permanents sont de nouvelles fenêtres/formes. Google Chrome peut avoir chaque onglet s'exécutant dans un processus différent, mais cela ne signifie pas que les éléments d'interface utilisateur réels représentant les onglets n'ont pas été marshalés sur le thread UI principal (celui qui a créé la fenêtre contenant le navigateur) pour l'affichage .
Maintenant, bien sûr, vous êtes toujours en mesure d'effectuer le travail de chargement des données pour vos grilles sur un thread séparé, et les liens de Ardman vous y aidera. Lorsque vous liez réellement vos données aux grilles, vous devrez le faire sur le thread d'interface utilisateur (ou plus précisément, le thread qui a créé le contrôle que vous modifiez).
Espérons que cela aide!
Ce n'est pas le contrôle qui est dans un fil séparé, mais la demande lancée par le contrôle.
Disons que vous avez deux onglets ouverts sur des adresses différentes. Vous cliquez sur un lien qui vous dirige vers un autre site sur le premier onglet. En attendant, vous cliquez sur un autre lien sur le second onglet.
Tout d'abord, vous devez savoir qu'un fil peut être lancé lorsque vous cliquez sur le lien dans le premier onglet, ce qui rend l'interface graphique réactive. C'est la même chose avec le deuxième onglet, lorsque vous avez cliqué sur le lien. Deuxièmement, nous avons maintenant un thread (le thread principal, également appelé thread graphique) qui est chargé de gérer l'interaction de l'utilisateur. Un autre thread traite la requête depuis le lien sur le premier onglet, et un autre thread depuis le lien sur le deuxième onglet. Troisièmement, pendant que vos demandes de lien pour les deux onglets sont en cours de traitement, vous pouvez ouvrir un nouvel onglet et lancer une recherche sur Google! Ensuite, cela nécessite que votre interface graphique soit réactive, même si l'application, le navigateur, est occupé par vos demandes. Quatrièmement, sur le retour des threads de fond, ils retourneront au thread principal rapportant le résultat de leur travail, c'est-à-dire la réponse Web qu'ils ont obtenue en demandant de résoudre le DNS lié aux liens cliqués.
Une manière intéressante de rendre possible en C#, et en le maintenant aussi facile que possible, est à travers la classe BackgroundWorker
.
Chaque instance d'un BackgroundWorker
représente un thread. Ainsi, vous devez instancier autant de BackgroundWorker
que l'application le requiert lorsqu'un clic de souris est capturé, lorsqu'un utilisateur clique sur un lien. La demande est ensuite envoyée à l'événement DoWork()
qui est déclenché lors de l'appel à la méthode RunWorkerAsync()
.
Here's an interesting tutorial sur la façon d'utiliser le BackgroundWorker
Cet article Microsoft explique à peu près comment l'Explorateur Windows fait exactement ce que vous demandez:
http://msdn.microsoft.com/en-us/library/ms741870.aspx#multi_browser
Vous avez essentiellement un thread par la fenêtre de niveau supérieur et tous les événements de cette fenêtre sont déclenchés sur le même thread.
- 1. WPF Gui rafraîchir de thread différent
- 2. glutPostRedisplay dans un thread différent
- 3. Connexion à un TcpListener sur un thread différent, même processus
- 4. Pourquoi un contrôle serait-il sur un thread différent de celui dans lequel je travaille?
- 5. Envoyer un message à un thread différent
- 6. Création d'un formulaire sur un thread non-gui
- 7. Mettez DrawingGroup sur un canevas?
- 8. Pouvez-vous relancer une exception .NET sur un thread différent?
- 9. Comment exécuter QTcpSocket dans un thread différent?
- 10. Thread WPF et GUI comment accéder à l'objet à partir de thread différent?
- 11. Mise à jour possible dans un thread différent (WPF)
- 12. Mettez un bouton sur une carte google
- 13. Imprimer sur un thread d'arrière-plan
- 14. exécuter la fonction dans un autre thread que gui
- 15. capturer une pile d'appels et l'exécuter dans un thread différent
- 16. Lecture d'une valeur manipulée dans un thread différent
- 17. RSS sur un thread différent ne fonctionne pas, mais fonctionne très bien quand sur le thread principal
- 18. QT + Comment appeler un emplacement à partir d'un code C++ personnalisé s'exécutant dans un thread différent
- 19. Comment changer l'état de la fenêtre de Form, sur un thread différent?
- 20. Rendre le thread exécuté sur un thread non EDT (thread d'envoi d'événement) à partir d'EDT
- 21. Un thread enfant d'un thread de dialogue GUI parent peut-il créer une fenêtre enfant?
- 22. Méthode d'appel sur le thread GUI à partir d'un thread timers
- 23. Mettez en surbrillance la première ligne dans un ListView et un contrôle ListBox
- 24. Le thread appelant ne peut pas accéder à cet objet car un thread différent le possède
- 25. Comment faire un sous-gui (?) Dans un gui?
- 26. comment connecter un signal à un emplacement dans un thread différent?
- 27. Le thread appelant ne peut pas accéder à cet objet car un thread différent le possède
- 28. Le thread appelant ne peut pas accéder à cet objet car un thread différent le possède
- 29. Jeu de caractères différent sur un serveur différent?
- 30. Passage d'un jeton d'emprunt d'identité sur un thread géré à un thread non géré
CreateWindow n'exige pas que le parent appartienne au même thread. C'est donc juste une autre fonctionnalité de Windows que .NET ne supporte pas. –
J'ai mentionné que vous pouviez en effet créer de nouvelles fenêtres/formulaires sur différents sujets ... Ai-je mal compris ce que vous dites? – Phong
Je crois que Google Chrome ne fait pas que * simplement * chercher l'arrière-plan dans un fil différent, il fait le rendu et tout traitement d'événement pour chaque onglet dans un fil différent. Sinon, vous êtes favori jeu flash dans un onglet pourrait potentiellement dégrader votre expérience de YouPo, er, YouTube dans un autre onglet. – SimonC