title: Show Command Prompt Output with BackgroundWorker.Backgroundworker
body: <p>I have a program that executes a batch file using an asynchronous background worker. Here is the code:</p>
  
  <pre><code>public static void Execute(CmdObj obj, bool batch)
  {
      CmdObj = obj;
  
      var theWorker = new BackgroundWorker();
      theWorker.RunWorkerCompleted += WorkerCompleted;
      theWorker.WorkerReportsProgress = true;
  
      if(batch)
      {
          theWorker.DoWork += WorkerBatchWork;
      }else{
          theWorker.DoWork += WorkerCommandWork;
      }
      theWorker.RunWorkerAsync();
  
  }
  
  private static void WorkerBatchWork(object sender, DoWorkEventArgs e)
  {
      RunBatch(CmdObj);
  }
  
  private static void WorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  {
      var temp = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);
      if (temp != null)
          ProgramPath = temp.Substring(6);
  
      WriteLog(CmdObj.Activity, false);
      WriteLog(CmdObj.Error, true);
  
      CmdObj.TheButton.Enabled = true;
  }
  
  private static void RunBatch(CmdObj obj)
  {
      var process = new Process();
      var startInfo = new ProcessStartInfo
                          {
                              FileName = obj.SrcFile,
                              WindowStyle = ProcessWindowStyle.Normal,
                              CreateNoWindow = false,
                              RedirectStandardInput = true,
                              RedirectStandardOutput = false,
                              RedirectStandardError = true,
                              UseShellExecute = false
                          };
  
  
      try
      {
          if (!obj.SrcFile.ToLower().Trim().EndsWith(".bat"))
              throw new FileLoadException("Not a valid .bat file",obj.SrcFile);
  
          process.StartInfo = startInfo;
          process.Start();
          process.WaitForExit();
  
          //obj.Activity = process.StandardOutput.ReadToEnd();
          obj.Error = process.StandardError.ReadToEnd();
  
      }
      catch (Exception ex)
      {
          obj.Exception = ex;
      }
      finally
      {
          process.Close();
      }
  }
  
  class CmdObj
  {
      public string Command { get; set; }
      public string SrcFile { get; set; }
      public string Activity { get; set; }
      public string Error { get; set; }
      public Exception Exception { get; set; }
      public Button TheButton { get; set; }
  }
  </code></pre>
  
  <p>So when I run this program and choose a batch file to execute, I get a blank CMD window. Is there some way to show the output in the CMD window when my program executes the batch file? Alternatively, if I could have the CMD output sent to a textbox or some other control (in real-time), that would work as well.</p>
  
  <p>Thanks!</p>