爲了運行命令提示符窗口,運行程序並讀取輸出,我已經實現了以下代碼(從tutorial改編而來)。該代碼是從ButtonClick事件處理程序中調用的,該處理程序嵌套在用戶控件中。使用外部過程的UI凍結
我的印象是這會讓我的程序的其餘部分在外部進程運行的同時運行,因爲這些方法是'異步'的。但是,這似乎並不是這種情況,因爲我的UI在操作運行時會凍結。我應該補充的是,當cmd進程結束時收到的輸出是正確的。
對不起,轉儲這樣的代碼負載,只是不知道該做什麼在這一點上!
任何援助將不勝感激。
public static void runExternalProcess()
{
StringBuilder output = new StringBuilder();
Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.UseShellExecute = false;
cmd.StartInfo.CreateNoWindow = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.OutputDataReceived += new DataReceivedEventHandler(outputEventHandler);
cmd.StartInfo.RedirectStandardInput = true;
cmd.Start();
cmd.BeginOutputReadLine();
StreamWriter sortStreamWriter = cmd.StandardInput;
StreamWriter sw = cmd.StandardInput;
if (sw.BaseStream.CanWrite)
{
sw.WriteLine("ping www.google.com");
}
sw.Close();
cmd.WaitForExit();
MessageBox.Show(output.ToString());
cmd.Close();
}
private static void outputEventHandler(object sendingProcess, DataReceivedEventArgs e)
{
if (!String.IsNullOrEmpty(e.Data))
{
output.Append(e.Data + Environment.NewLine);
}
}
我已經在上面的代碼中添加了,並刪除了watiforexit()調用,但現在函數不顯示消息框,任何想法? – 2012-04-12 16:12:02
你刪除了'cmd.WaitForExit();'對嗎? – SwDevMan81 2012-04-12 16:14:53
對不起,正在緩慢(然後編輯評論)。消息框現在完全不顯示。你有什麼想法,爲什麼? – 2012-04-12 16:18:05