コマンドプロンプトウィンドウを実行し、プログラムを実行して出力を読み取るために、次のコード(tutorialから適合)を実装しました。このコードは、UserControlにネストされた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()呼び出しを削除しましたが、関数はメッセージボックスを表示しません。 –
'cmd.WaitForExit();'を削除しましたか? – SwDevMan81
はい残念ですが、遅いです(そしてコメントを編集しました)。メッセージボックスは今ではまったく表示されません。なぜあなたはどんな考えがありますか? –