2009-04-01 9 views
1

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#

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é

+0

Je vais regarder dans it.thanks..will vous faire savoir ce qui se passe. –

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