利用 Process 類別啟動子進程,將 StandardOutput 重導向,另開執行緒持續讀取並即時顯示於 TextBox,不阻塞主 UI 執行緒。
Process proc = new Process();
proc.StartInfo.FileName = strScript; // 腳本/可執行檔路徑
proc.StartInfo.WorkingDirectory = strDirectory;
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.UseShellExecute = false; // 必須 false 才能重導向
proc.StartInfo.RedirectStandardOutput = true;
proc.Start();
AutoResetEvent eventOutput = new AutoResetEvent(false);
Thread threadOutput = new Thread(DisplayOutput) { IsBackground = true };
threadOutput.Start();
WaitHandle.WaitAll(new[] { eventOutput }); // 等待讀取結束 (可選)
private void DisplayOutput()
{
while (proc != null && !proc.HasExited)
{
string line;
while ((line = proc.StandardOutput.ReadLine()) != null)
{
txtOutput.AppendText(line + "\r\n");
txtOutput.SelectionStart = txtOutput.Text.Length;
txtOutput.ScrollToCaret(); // 自動捲動到最新
}
Thread.Sleep(100); // 降低 CPU 佔用
}
eventOutput.Set(); // 通知完成
}
AppendText + SelectionStart/ScrollToCaret 避免 += 導致整個 TextBox 重繪閃爍。UseShellExecute=false 是重導向前提。此模式適用於呼叫命令列工具、編譯器、腳本並即時捕獲輸出的場景。