Sto utilizzando VBOXMANAGE per "esportare" un computer guest. VBOXManage è un'applicazione console in grado di controllare il comportamento della macchina guest dall'host. Dal momento che il comando di esportazione è un processo lungo, restituisce gli aggiornamenti di processo in questo modo:Reindirizzamento dell'output della console in realtime utilizzando il processo
0% ... 10% ... 20% ... 30% ... 100%
sto scrivendo un Applicazione C# che invocherà VBOXManage usando Process. Ecco il mio codice:
Process VBOXProc = new Process();
VBOXProc.StartInfo.FileName = VBOXMANAGE;
VBOXProc.StartInfo.Arguments = Arguments;
VBOXProc.StartInfo.UseShellExecute = false;
VBOXProc.StartInfo.CreateNoWindow = true;
VBOXProc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
VBOXProc.StartInfo.RedirectStandardError = true;
VBOXProc.StartInfo.RedirectStandardOutput = true;
VBOXProc.OutputDataReceived += new DataReceivedEventHandler(VBOXProc_OutputDataReceived);
VBOXProc.ErrorDataReceived += new DataReceivedEventHandler(VBOXProc_ErrorDataReceived);
VBOXProc.EnableRaisingEvents = true;
VBOXProc.Start();
VBOXProc.BeginOutputReadLine();
VBOXProc.BeginErrorReadLine();
VBOXProc.WaitForExit();
Questo va bene, tranne che l'uscita viene letta per LINE. Ciò significa che il processo aggiorna " 0% ... 10% ... 20% ... 30% ... 100%" mostrerà solo DOPO che il processo effettivo è terminato.
C'è un modo per acquisire l'output della console in tempo reale?
Grazie!
Nota il nome della funzione: BeginOutput * ReadLine * –
Sì, grazie nobugz per quella meravigliosa intuizione. ;) – Ian
Un paio di istruzioni 'With' renderebbero questo codice molto più semplice per gli occhi (e gli appunti) ...' Con VBOXProc ... Con .StartInfo ... End With ... End With'. – Basic