-1

Processbar1myとReportProgresseach が一度しかトリガー されない理由は何でしょうか?

ボタンを初めてクリックすると、すべてが期待どおりに機能します。それ以降のすべてのクリックProgressBar1!を除いて、すべてがまだ機能しています。

最初の実行で期待される値を取得するデバッガーで確認できます。progressBar1.Valueそれ以降のすべての実行にはprogressBar1.Value常に「0」が含まれます。

foreach-loopを実行するのは最も奇妙ですb.ReportProgress(i * 100 / x)
i= 現在のループ数
x= 総ループ数

.

ここに私のコードのスニペットがあります:

BackgroundWorker b = new BackgroundWorker();

    public Form()
    {
        InitializeComponent();

        b.WorkerReportsProgress = true;
        b.DoWork += new DoWorkEventHandler(b_DoWork);
        b.RunWorkerCompleted += new RunWorkerCompletedEventHandler(b_RunWorkerCompleted);
        b.ProgressChanged += new ProgressChangedEventHandler(b_ProgressChanged);
    }

    void b_DoWork(object sender, DoWorkEventArgs e)
    {
        int i = 0;
        int x = xxx.MaxValue;
        foreach (var item in collection)
        {
            //... somecode   ...(item);
            b.ReportProgress(i * 100 / x);
            i++;
        }
        //... somecode
        e.Result = dt;
    }

    void b_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        progressBar1.Value = e.ProgressPercentage;
    }

    void b_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        GridView.DataSource = e.Result;
        GridView.Update();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        b.RunWorkerAsync();
    }

編集:

    private void btnClearGrid_Click(object sender, EventArgs e)
    {
        dt.Clear();
        GridView.DataSource = dt;
        GridView.Update();
    }

私は問題を発見しました..
問題は、グリッドをクリアする代わりに、Backgroundworker を実行する前に Gridview をクリアしようとしたことと、追加のデータソースをグリッドにバインドするこのbtnClearGrid-Click-Event を含む(そう思う) GridView.DataSource = dt;.

    private void btnClearGrid_Click(object sender, EventArgs e)
    {
        dt.Clear();
        GridView.DataSource = null;
    }
4

2 に答える 2

0

クリック間の進行状況バーをリセットしてみてください。

private void button1_Click(object sender, EventArgs e)
{
    progressBar1.Value = 0;
    b.RunWorkerAsync();
}
于 2013-06-18T10:57:11.737 に答える