1

この質問について非常に多くのリンクを試しましたが、ヘルプが見つかりませんでした。Webページからデータを取得し、リストボックスに結果を表示する.exeファイルを実行するこのコードがあります。これには時間がかかり、ウィンドウがフリーズします。BackgoundWorker を使用することにしましたが、すべての例でループを使用して進行状況バーを更新します。私の場合はループがありません。進行状況バーをインクリメントするにはどうすればよいですか? これについて私を助けてください、これが私のコードです、

        labelstat.Text = "Please wait..";
        // Start the child process.
        Process p = new Process();


        // Redirect the output stream of the child process.
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.RedirectStandardOutput = true;
        p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        p.StartInfo.CreateNoWindow = true;
        p.StartInfo.FileName = "Out.exe";

        p.Start();
        // Do not wait for the child process to exit before
        // reading to the end of its redirected stream.
        // p.WaitForExit();
        // Read the output stream first and then wait.
        string output = p.StandardOutput.ReadToEnd();
        p.WaitForExit();

        checkedListBox1.Items.AddRange(output.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries));

これを貼ってみたのですが、

        backgroundWorker_DoWork

バックグラウンドでタスクを実行する方法ですが、コードによって実行されるプロセスに従ってプログレスバーをインクリメントする方法がわかりませんか? :( どうもありがとうございます..

4

1 に答える 1

0

プログレス バーを変更できるかどうかはわかりません。結局のところ、プログラムが実行した作業のパーセンテージをどうやって知るのでしょうか。ただし、できることは、UI の応答性を維持することです。バックグラウンド ワーカーを使用して既に完了している可能性がありますが、プログラムが出力ストリームに書き込むときに UI に行を追加することで、さらに多くのことができる可能性があります (ただし、データをダウンロードする必要があるため、ダウンロードするまで出力が見つからない場合があります)。それは一度にすべて完了します)。

p.HasExistedこれを行うには、(プログラムが終了したことを示す)まで実行されるループを作成します。そのループでは、進行状況 ( BackgroundWorker.ReportProgress ) を報告し、おそらくこれまでの出力文字列配列を渡します。次に、バックグラウンド ワーカーの progress changed イベント ハンドラーで、進行状況を報告したときに渡した配列オブジェクトを使用して UI を更新します。

于 2012-09-26T10:29:17.000 に答える