ここで探している答えを見つけることができませんでしたが、もしそうならリンクしてください。この重複した投稿を閉じます。
私が取り組んでいるプログラムの一部として、次の 3 つの単純なことをこの順序で実行したいと考えています。
1.) マーキー プログレス バーを表示する 2.) CMD でいくつかのコマンドを実行し、出力をアクセス可能な文字列に移動する 3.) プログレス バーを停止/非表示にする
私が見ている問題は、私のコードが順番に実行されていないことであり、その理由について非常に混乱しています. 不可能なステップ 2-1-3 に進むようです。
さらに奇妙なことに、ステップ 1 とステップ 2 の間のメッセージ ボックスのコメントを外すと、順番に実行されます。
新しいCMDプロセスがこれを狂わせている何かがありますか?
このメソッドのコードは次のとおりです。
//STEP 1 - Updates label and starts progress bar
lblSelectDiagnostic.Text = "Diagnostic Running";
progressBarDiag.Visible = true;
progressBarDiag.MarqueeAnimationSpeed = 100;
//MessageBox.Show("Status Updated");
//STEP 2 - Runs "Test Internet Connection"
//Gets selected diagnostic name
string strSelectedDiag = listBoxDiagnostics.SelectedItem.ToString();
var name = strSelectedDiag.Substring(strSelectedDiag.LastIndexOf(':') + 1);
strSelectedDiag = name.Trim();
if (strSelectedDiag.Contains("Test Internet Connection"))
{
//Pings Google
ProcessStartInfo info = new ProcessStartInfo();
info.RedirectStandardError = true;
info.RedirectStandardInput = true;
info.RedirectStandardOutput = true;
info.UseShellExecute = false;
info.FileName = "cmd.exe";
info.CreateNoWindow = true;
//Creates new process
Process proc = new Process();
proc.StartInfo = info;
proc.Start();
//Writes commands
using (StreamWriter writer = proc.StandardInput)
{
if (writer.BaseStream.CanWrite)
{
writer.WriteLine("ping www.google.com");
writer.WriteLine("exit");
}
writer.Close();
}
string PingGoogle = proc.StandardOutput.ReadToEnd();
proc.Close();
}
//STEP 3 - Resets label and stops progress bar
progressBarDiag.MarqueeAnimationSpeed = 0;
progressBarDiag.Visible = false;
lblSelectDiagnostic.Text = "Select Diagnostic to Run:";
-ありがとう!