Отображение хода выполнения скрипта в строке прогресса winform - PullRequest
0 голосов
/ 27 июля 2011

У меня есть следующий код:

Process scriptProc = new Process();
scriptProc.StartInfo.FileName = @"cscript";
scriptProc.Start();
scriptProc.WaitForExit();
scriptProc.Close();

И я хочу скрыть это окно cscript, которое будет отображаться при выполнении вышеуказанного кода.И есть ли какой-нибудь способ показать вышеописанный прогресс скрипта в элементе управления winform progressbar?

Спасибо.

1 Ответ

2 голосов
/ 13 августа 2011

Чтобы запустить процесс без отображения нового окна, попробуйте:

    scriptProc.StartInfo.CreateNoWindow = true;

Чтобы показать прогресс скрипта, вам нужно, чтобы скрипт записал свой текст прогресса в стандартный вывод, а затем попросил вызывающую программу прочитать текст прогрессаи отобразить его в вашем пользовательском интерфейсе.Как то так:

   using ( var proc = new Process() )
    {
        proc.StartInfo = new ProcessStartInfo( "cscript" );
        proc.StartInfo.CreateNoWindow = true;
        proc.StartInfo.RedirectStandardOutput = true;
        proc.StartInfo.UseShellExecute = false;

        proc.OutputDataReceived += new DataReceivedEventHandler( proc_OutputDataReceived );
        proc.Start();
        proc.BeginOutputReadLine();
        proc.WaitForExit();
        proc.OutputDataReceived -= new DataReceivedEventHandler( proc_OutputDataReceived );

    }

void proc_OutputDataReceived( object sender, DataReceivedEventArgs e )
{
    var line = e.Data;

    if ( !String.IsNullOrEmpty( line ) )
    {
        //TODO: at this point, the variable "line" contains the progress
        // text from your script. So you can do whatever you want with
        // this text, such as displaying it in a label control on your form, or
        // convert the text to an integer that represents a percentage complete
        // and set the progress bar value to that number.

    }
}
...