2011-05-16 3 views
1

J'ai un traitement par lots Java que j'ai utilisé en C# pour exécuter le processus. Je veux avoir un test pour vérifier si le processus par lots est en cours ou non.Traitement par lots dans C#

J'ai utilisé le traitement par lots comme:

void batch_process(string process) 
{ 
    try 
    { 
     string strFilePath = Path.Combine(batch_process_path, process); 
     ProcessStartInfo psi = new ProcessStartInfo(strFilePath); 
     psi.RedirectStandardOutput = true; 
     psi.RedirectStandardError = true; 
     psi.WorkingDirectory = batch_process_path; 
     psi.WindowStyle = ProcessWindowStyle.Hidden; 
     psi.UseShellExecute = false; 
     psi.ErrorDialog = true; 
    } 
} 

Comment ce test peut être fait?

Je souhaite écrire un test élémentaire pour vérifier si le processus va démarrer ou non.

+0

Ce code ne démarrera pas un processus. Il initialise simplement une instance de ProcessStartInfo. – PVitt

+0

Il demande simplement comment vérifier s'il fonctionne toujours. –

Répondre

1

Vous pouvez commencer le processus en utilisant

Process process = new Process(); 
string strFilePath = Path.Combine(batch_process_path, process); 
process.StartInfo.FileName = strFilePath; 

//this line will hold this thread until the process is done. 
process.WaitForExit(); 

puis lancer le processus sur un thread différent et laissez-le feu de fil après un événement process.WaitForExit(); est fait.

1

Vous devez d'abord démarrer le processus en utilisant le ProcessStartInfo que vous venez de créer comme:

Process process = Process.Start(psi); 

vous pouvez utiliser process.HasExited pour vérifier si le processus est terminé. Souvent, vous n'avez pas besoin de faire cela, car process.WaitForExit() bloque le code jusqu'à ce que le processus se termine.

2

Lorsque vous Start votre nouveau processus, vous devez capturer le Process retourné, qui donne accès au processus nouvellement démarré, utile pour démarrer, arrêter, contrôler et surveiller les applications.

Process exe = Process.Start(psi); 
    .... 

if exe.HasExited() .... 
1

Je suis un peu incertain du scénario de votre question ... mais 4 techniques que vous pouvez utiliser sont:

En général ... Je préfère utiliser Process.Exited, mais les autres méthodes ont tous leur place aussi!