1

バックグラウンド ワーカーとプログレス バーの実装を探しています。私が見つけることができるのは、を使用したシミュレーションだけThreading.Sleep()です。サンプルはすべて機能していますが、シミュレーションを実際の SQL クエリに変更すると機能しません。

以下のコードのどこにクエリを挿入すればよいですか、助けてください。.NET-2.0

void m_oWorker_DoWork(object sender, DoWorkEventArgs e)
    {
        // The sender is the BackgroundWorker object we need it to
        // report progress and check for cancellation.
        //NOTE : Never play with the UI thread here...
        for (int i = 0; i < 100; i++)
        {
            Thread.Sleep(100);

            // Periodically report progress to the main thread so that it can
            // update the UI.  In most cases you'll just need to send an
            // integer that will update a ProgressBar                    
            m_oWorker.ReportProgress(i);
            // Periodically check if a cancellation request is pending.
            // If the user clicks cancel the line
            // m_AsyncWorker.CancelAsync(); if ran above.  This
            // sets the CancellationPending to true.
            // You must check this flag in here and react to it.
            // We react to it by setting e.Cancel to true and leaving
            if (m_oWorker.CancellationPending)
            {
                // Set the e.Cancel flag so that the WorkerCompleted event
                // knows that the process was cancelled.
                e.Cancel = true;
                m_oWorker.ReportProgress(0);
                return;
            }
        }

        //Report 100% completion on operation completed
        m_oWorker.ReportProgress(100);
    }
4

2 に答える 2

1

「クエリ」によって、実行する操作は 1 つだけのように聞こえます。これは、SQL クエリの進行状況を実際に測定する方法がないため、進行状況バーを扱いにくいものにします。それがどれだけ長く続くかはわかりません。クエリの実行中に、非コミットの無限スクロール ビジー インジケーターを使用したいだけかもしれません。

于 2013-06-12T07:18:25.230 に答える
0

を確認した直後に、このバックグラウンド ワーカーの実際のタスクである SQL クエリを実行する必要がありますCancellationPending

于 2013-06-12T06:12:53.017 に答える