2010-04-22 2 views
1

Dans mon programme C#, j'appelle un programme externe à partir de la ligne de commande en utilisant un processus et en redirigeant l'entrée standard. Après que j'émette la commande au programme externe, toutes les 3 secondes je dois émettre une autre commande pour vérifier l'état - le programme répondra avec InProgress ou fini. Je voudrais de l'aide pour le faire aussi efficace que possible. Le processus vérifie l'état d'une opération longue exécutée par un service Windows (pour des raisons que je ne voudrais pas détailler, je ne peux pas interagir directement avec le service), donc le processus sort après chaque commande, mais le code de sortie est toujours le même le résultat.Vérification périodique de la sortie de la ligne de commande en C#

+1

Alors, demandez-vous comment émettre périodiquement la commande, ou comment obtenir l'entrée à partir de la ligne de commande? –

Répondre

2
+0

Le code de sortie est toujours le même. – kjv

+0

Je suppose que l'OP voulait un moyen de déterminer si le processus est terminé. C'est pourquoi ils utilisent un autre processus. Je suppose que la façon d'aller ici est d'utiliser l'événement sortant du processus – Midhat

+0

@iulianchira Alors vous avez probablement juste besoin de l'événement sorti – Midhat

2

Vous pouvez utiliser un Timer pour exécuter un code à un intervalle spécifié, et Process.StandardOutput pour lire la sortie du processus:

Timer timer = new Timer(_ => 
{ 
    Process p = new Process(); 
    p.StartInfo.UseShellExecute = false; 
    p.StartInfo.RedirectStandardOutput = true; 
    p.StartInfo.FileName = "foobar.exe"; 
    p.Start(); 

    string output = p.StandardOutput.ReadToEnd(); 
    p.WaitForExit(); 

    switch (output) 
    { 
    case "InProgress": 
     // ... 
     break; 

    case "Finished": 
     // ... 
     break; 
    } 
}); 

timer.Change(TimeSpan.FromSeconds(0), TimeSpan.FromSeconds(3)); 
+0

-1 pour TEH. j/k –

Questions connexes