392 votes

Comment exécuter un simple bout de code dans un nouveau fil de discussion ?

J'ai un bout de code que je dois exécuter dans un thread différent de celui de l'interface graphique, car il provoque actuellement un gel du formulaire pendant l'exécution du code (10 secondes environ).

Supposons que je n'ai jamais créé de nouveau fil de discussion auparavant ; quel est un exemple simple/basique de la façon de le faire en C# et en utilisant .NET Framework 2.0 ou plus ?

1voto

Dour High Arch Points 11896

Il existe de nombreuses façons d'exécuter des threads séparés dans .Net, chacune ayant un comportement différent. Avez-vous besoin de poursuivre l'exécution du thread après la fermeture de l'interface graphique ? Avez-vous besoin de transmettre des informations entre le thread et l'interface graphique ? Le thread doit-il mettre à jour l'interface graphique ? Le thread doit-il effectuer une tâche puis quitter, ou doit-il continuer à fonctionner ? Les réponses à ces questions vous indiqueront la méthode à utiliser.

Il y a une bonne article sur la méthode asynchrone sur le site web du Code Project qui décrit les différentes méthodes et fournit des exemples de code.

0voto

IgorK Points 547

Comment : Utiliser un fil d'arrière-plan pour rechercher des fichiers

Vous devez être très prudent avec l'accès des autres threads aux éléments spécifiques de l'interface graphique (c'est commun à de nombreuses boîtes à outils d'interface graphique). Si vous voulez mettre à jour quelque chose dans l'interface graphique à partir d'un thread de traitement, vérifiez les points suivants cette réponse qui, à mon avis, est utile pour WinForms. Pour WPF, voir ce (il montre comment toucher le composant dans la méthode UpdateProgress() pour qu'il fonctionne à partir d'autres fils, mais en fait je n'aime pas que cela ne soit pas fait CheckAccess() avant de faire BeginInvoke par le biais de Dispathcer, voir et recherchez CheckAccess dans celle-ci)

Je cherchais un livre spécifique à .NET sur le threading et j'ai trouvé celui-ci (téléchargeable gratuitement). Voir http://www.albahari.com/threading/ pour plus de détails à ce sujet.

Je pense que vous trouverez ce dont vous avez besoin pour lancer l'exécution en tant que nouveau fil dans les 20 premières pages et il y en a beaucoup d'autres (je ne suis pas sûr qu'il s'agisse de snippets spécifiques à l'interface graphique, je veux dire strictement spécifiques au threading). Je serais heureux d'entendre ce que la communauté pense de ce travail, car je suis en train de lire celui-ci. Pour l'instant, il m'a semblé assez intéressant (pour montrer les méthodes et les types spécifiques à .NET pour le threading). Il couvre également .NET 2.0 (et non l'ancien 1.1), ce que j'apprécie vraiment.

0voto

Robert Paulson Points 10792

Je vous recommande de regarder le livre de Jeff Richter. Bibliothèque Power Threading et plus particulièrement l'IAsyncEnumerator. Jetez un coup d'œil à la vidéo sur Charlie Calvert Le blog de Richter en donne un bon aperçu.

Ne vous laissez pas décourager par le nom, car il facilite le codage des tâches de programmation asynchrone.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X