2016-03-22 25 views
0

進捗バーのフィードバックを使用して特定のボタンをクリックした後にcmdを使用してsumコマンドを実行するアプリケーションを作成しています。私が直面している問題は、進行状況バーがプロセスと同時に動作していないということです。コードが実行中の進行状況をプログレスバーに表示することを意味します。それがしているのは、cmdでコードの実行が終了すると、プログレスバーに100%の完了が表示されるということです。完了後、メッセージボックスがポップアップしています。ボタンがクリックされたときに最初にメッセージを表示し、プロセスが終了したら別のメッセージを表示する必要があります。プロセス終了メッセージは機能していますが、開始メッセージは機能していません。助けてください。前もって感謝します。C#のVisual Studio 2013のプログレスバーが実行中のcmdコードと同期

private void button11_Click(object sender, EventArgs e) 
{ 
    Process p = new Process(); 
    progressBar1.Value = 0; 
    p.StartInfo.FileName = "cmd"; 
    p.StartInfo.Arguments = "/c fastboot flash system system.img"; 
    p.StartInfo.UseShellExecute = false; 
    p.StartInfo.RedirectStandardOutput = true; 
    p.StartInfo.CreateNoWindow = true; 
    p.Start(); 
    p.WaitForExit(); 
    progressBar1.PerformStep(); 
    String sr = p.StandardOutput.ReadToEnd(); 
    label7.Text = sr; 
    if (progressBar1.Value != 10) 
    { 
     MessageBox.Show("Flashing System. Please Wait"); 
    } 
    else if (progressBar1.Value == 10) 
    { 
     MessageBox.Show("Done System Flashing"); 
    } 
} 
+0

これは、 'p.WaitForExit(); 'というプロセスをブロックしているためです。 –

+0

その行を削除してください。そして、メッセージボックスのポップアップに関する何かを提案してください。 –

答えて

0

あなたがここで呼び出している単純な外部コマンドでは、それを行うことはできません。まず、プロセスが終了するのを同期して待っています(p.WaitForExit()で)。次に、プロセスがどれぐらいの時間がかかるかわかりません。ほとんど何もないかもしれないが何時間もかかるかもしれない。もちろん、プロセスの出力を解析することなく、どれくらいの距離であるかもわかりません。

最初の問題は、WaitForExit(int)でタイムアウトを使用することで "解決"できるため、処理が完了するまでループすることができます。しかし、それは忙しく待っている、それはあまりいいことではない。また、タスクをバックグラウンドスレッドに移動することもできますが、それでも2番目の部分は解決されません。これには、フラッシュコマンドの出力を解析することが含まれます。しかし、これは非常にエラーを起こしやすいプロセスであり、小さな変更(新しいバージョン、異なるロケール設定を持つユーザーなど)でも失敗する傾向があります。

残念ながら、あなたがここで行うことができるのは、「未定義の時間を待ってください」タイプのダイアログを表示することだけです。

+0

私はこのコードを 'if(progressBar1.Value!= 10) { MessageBox.Show(" Flaming System。Please Wait "); } else if(progressBar1.Value == 10) { MessageBox.Show( "Done System Flashing"); } 'しかし、 'お待ちください'というメッセージボックスはポップアップしていません。プロセスが終了すると、「完了」メッセージボックスが機能しています。 –

+0

これは、 'progressBar1.PerformStep();'を呼んだときとはまったく関係がありません。すべてのプロセスが既に完了しています。 – PMF

+0

1つのメッセージボックスだけが機能しますか? –

関連する問題