Read StandardOutput Process from BackgroundWorkerProcess method
- by Nicola Celiento
Hi all,
I'm working with a BackgroundWorker Process from Windows .NET C# application.
From the async method I call many instance of cmd.exe Process (foreach), and read from StandardOutput, but at the 3-times cycle the ReadToEnd() method throw Timeout Exception.
Here the code:
    StreamWriter sw = null;
DataTable dt2 = null;
StringBuilder result = null;
Process p = null;
for(DataRow dr in dt1.Rows)
{
    arrLine = new string[4];    //new row
    result = new StringBuilder();
    arrLine[0] = dr["ID"].ToString();
    arrLine[1] = dr["ChangeSet"].ToString();
    #region Initialize Process CMD
    p = new Process();
    ProcessStartInfo info = new ProcessStartInfo();
    info.FileName = "cmd.exe";
    info.CreateNoWindow = true;
    info.RedirectStandardInput = true;
    info.RedirectStandardOutput = true;
    info.RedirectStandardError = true;
    info.UseShellExecute = false;
    p.StartInfo = info;
    p.Start();
    sw = new StreamWriter(p.StandardInput.BaseStream);
    #endregion
    using (sw)
    {
        if (sw.BaseStream.CanWrite)
        {
            sw.WriteLine("cd " + this.path_WORKDIR);
            sw.WriteLine("tfpt getcs /changeset:" + arrLine[1]);
        }
    }
    string strError = p.StandardError.ReadToEnd();      // Read shell error output commmand (TIMEOUT)
    result.Append(p.StandardOutput.ReadToEnd());        // Read shell output commmand
    sw.Close();
    sw.Dispose();
    p.Close();
    p.Dispose();
} 
Timeout is on code line:
string strError = p.StandardError.ReadToEnd();
Can you help me?
Thanks!