0

私の単純なプログラムでは、1 つのプログレス バーと 1 つのボタンがあります。

これで、このボタンはデータベースから 2 つのテーブルを読み取ります (mysql例として)。

2 つの異なるテーブルを読み取るための 2 つの単純な select ステートメントのみ。

私の質問は

最初のテーブルを読み取り/選択した後、進行状況バーの値が 0 にリセットされ、次のテーブルの読み取りが続行され、進行状況バーが再び増加するように進行状況バーを実装するにはどうすればよいですか?

この機能は、一部のアプリケーションをインストールする場合と非常によく似ています。この場合、コピーするファイルごとに個別の進行状況が表示されますが、進行状況バーは 1 つしか使用されません。

例を挙げていただけると助かります。

バックグラウンドワーカーも提供できればはるかに良い

4

2 に答える 2

0

1)。データベースを読み取るとき、正確な進行状況を取得するために受け取るエントリの数はわかりません。したがって、SQL サーバーからのこの情報が必要です。SQL Server からのレポートの進行状況をお読みください。

2)。の使い方BackgroundWorkerは、DEV N00B さんのコメントでとてもよく説明されています。2 つのクエリを実行するには、クエリごとに独自の DoWork 関数を持つ個別のワーカーを作成し、この方法で呼び出します。

private void worker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
  this.progressBar1.Value = 0;

  Thread.Sleep(1000);

  if (worker2.IsBusy != true)
  {
    worker2.RunWorkerAsync();
  }
}
于 2013-07-19T10:02:22.933 に答える
0

アイデアがあるでしょう: ご不明な点がございましたら、お気軽にお問い合わせください。

async private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            await Task.Factory.StartNew(ExecuteSQL1);
            UpdateProgressBar(0);
            await Task.Factory.StartNew(ExecuteSQL2);
            UpdateProgressBar(0);            
        }

private void ExecuteSQL1()
        {
            for (int i = 0; i < 100; i++)
            {
                int progressBarValue = i;
                Task.Factory.StartNew(() => UpdateProgressBar(progressBarValue), CancellationToken.None, TaskCreationOptions.None, uiScheduler);
                Thread.Sleep(50);
            }
        }

 private void ExecuteSQL2()
        {
            for (int i = 0; i < 100; i++)
            {   
                int progressBarValue = i;
                Task.Factory.StartNew(() => UpdateProgressBar(progressBarValue), CancellationToken.None, TaskCreationOptions.None, uiScheduler);
                Thread.Sleep(100);
            }
        }

TaskScheduler uiScheduler;

        public MainWindow()
        {
            InitializeComponent();

            uiScheduler = TaskScheduler.FromCurrentSynchronizationContext();
        }
于 2013-07-19T08:21:50.313 に答える