Domanda

Questo codice viene eseguito "handbrakecli" (un'applicazione a riga di comando) e pone l'uscita in una stringa:

Dim p As Process = New Process    
p.StartInfo.FileName = "handbrakecli"
p.StartInfo.Arguments = "-i [source] -o [destination]"
p.StartInfo.UseShellExecute = False
p.StartInfo.RedirectStandardOutput = True
p.Start

Dim output As String = p.StandardOutput.ReadToEnd
p.WaitForExit 

Il problema è che questo può richiedere fino a 20 minuti per completare, durante il quale nulla sarà riportato indietro all'utente. Una volta che è stata completata, vedranno tutto l'output del programma che include i dettagli sullo stato di avanzamento. Non molto utile.

Per questo sto cercando di trovare un esempio che mostra il modo migliore per:

  1. Avvia un programma esterno (nascosto)
  2. Controlla periodicamente la sua uscita in quanto visualizza informazioni su di esso del corso (in modo da poter estrarre questo e presentare una barra di percentuale piacevole per l'utente)
  3. Determinare quando l'applicazione esterna ha finito (quindi non posso continuare con la mia esecuzione di applicazioni)
  4. Uccidi l'applicazione esterna, se necessario, e di rilevare quando questo è successo (in modo che se l'utente preme "Annulla", ottengo prendere le misure appropriate)

Qualcuno ha qualche frammenti di codice raccomandata?

È stato utile?

Soluzione

La proprietà StandardOutput è di tipo StreamReader, che ha metodi diversi ReadToEnd. Sarebbe più codice, ma se è stato utilizzato il metodo di lettura, si potrebbe fare altre cose come fornire all'utente la possibilità di cancellare o segnalare qualche tipo di progresso.

link per leggere il metodo con il codice di esempio:

http://msdn.microsoft. com / it-it / library / ath1fht8 (v = VS.90) aspx

Modifica:

La classe Process ha anche un metodo BeginOutputReadLine che è una chiamata metodo asincrono con callback.

http: //msdn.microsoft.com/en-us/library/system.diagnostics.process.beginoutputreadline(v=VS.90).aspx

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top