salut j'ai créé un processus en C# pour exécuter un programme externe, j'ai utilisé les méthodes asynchrones à lire sur le standardoutput et tout fonctionne bien. Cependant, j'ai un problème, j'imprime une ligne indiquant que le processus est terminé. Le problème est que, parfois, cela peut arriver lorsque les données dans le tampon sont énormes, que le processus peut se terminer, mais que l'impression est en cours sur un autre thread, il peut encore être l'impression des données. Ainsi, les informations indiquant que le processus s'est terminé s'affichent avant que la sortie entière ne soit imprimée. Y at-il quelque chose fourni dans. NET pour résoudre un tel problème? Puisque je fais un appel asynchrone, je ne peux pas accéder à la valeur de process.standardoutput, car cela provoque un conflit. Que puis-je faire?processus a quitté mais le tampon est toujours en cours d'impression, C#
1
A
Répondre
2
Utilisez la synchronisation entre vos threads!
Vous devriez regarder dans AutoResetEvents, ce qui correspond parfaitement à votre scénario (ie un thread désire informer un autre qu'un événement survenu - dans votre exemple, que la lecture de la mémoire tampon est terminée)
En règle générale, votre thread principal attendra sur le AutoResetEvent, qui sera pulsé par la bande de roulement du travailleur une fois que son travail est terminé.
Dans ce cas précis (par exemple en attente d'un fil à la fin), vous pouvez également utiliser Thread.Join, qui bloque votre fil conducteur jusqu'à ce que votre thread de travail est terminé
1
Si vous appelez EndInvoke sur le délégué async, la thread devrait bloquer jusqu'à ce que l'opération est terminée.
Questions connexes
- 1. Détection si un processus est toujours en cours
- 2. C#: trouver le processus en cours
- 3. CausesValidation est défini sur "False" mais la validation côté client est toujours en cours
- 4. Obtenir le processus en cours donné handle de processus
- 5. Contrôles invisibles toujours en cours
- 6. UpdatePanelAnimationExtender toujours en cours d'exécution
- 7. A l'intérieur d'un fichier batch, comment savoir si un processus est en cours d'exécution?
- 8. Charge CPU du processus en cours
- 9. Exception sur C# - mais le programme fonctionne toujours
- 10. Obtenez l'utilisation du processeur en cours de processus en C
- 11. comment obtenir le pid d'un processus qui a envoyé un signal SIGABRT à un autre processus qui a quitté le noyau de dumping
- 12. Utilisation de la mémoire du processus en cours dans C
- 13. Exécuter une commande lorsqu'un processus est en cours
- 14. Modifier le nom du processus en C#?
- 15. Comment puis-je savoir si un processus est déjà en cours d'exécution avec C#?
- 16. Comment trouver le chemin depuis lequel le processus/exécutable actuel est en cours d'exécution?
- 17. Comment puis-je déterminer le nom du processus ciblé en cours et la version en C#
- 18. Impossible de masquer un processus en cours dans le terminal
- 19. processus en cours d'exécution, étape par étape
- 20. Liste des processus en cours d'exécution
- 21. Comment savoir si un processus est en cours d'exécution sur un périphérique mobile
- 22. La détection d'un processus est déjà en cours d'exécution dans Windows à l'aide de C# .net
- 23. Comment vérifier si un processus est en cours d'exécution en utilisant Delphi?
- 24. Vérifiez si le handle appartient au processus en cours?
- 25. Vérifiez si le service est en cours d'exécution dans WiX
- 26. Le code C est-il toujours considéré comme C++?
- 27. Débogage d'un processus python en cours d'exécution
- 28. Vérifier si une application est toujours en cours d'exécution à partir d'un fichier batch?
- 29. Indique si le thread d'événement 'écoulé' est toujours en cours d'exécution?
- 30. EXE reste dans le Gestionnaire des tâches après avoir quitté
Je vais regarder dans it.thanks..will vous faire savoir ce qui se passe. –