2017-12-21 22 views
0

私は別のスレッドで本当に同じ時間に多くのクエリを実行したいです。私はこの問題を解決するためにバックグラウンドワーカーを使用しています!私の質問です:UI要素を委譲する良い方法はありますか、それは私が行ったように正しいですか?同時に2つ以上のSQLクエリを実行するには?

private void mainform_Load(object sender, EventArgs e) 
    { 


     if (bscan_backgroundworker.IsBusy == false) 
     { 
      bscan_backgroundworker.RunWorkerAsync(); 
     } 

    if (bscan2_backgroundworker.IsBusy == false) 
     { 
      bscan2_backgroundworker.RunWorkerAsync(); 
     } 

    } 

    private void bscan_backgroundworker_DoWork(object sender, DoWorkEventArgs e) 
    { 
     bscan(); 

    } 

    private void bscan2_backgroundworker_DoWork(object sender, DoWorkEventArgs e) 
    { 
     bscan2(); 

    } 

    private void bscan() 
    { 

    string query = "Select * from table_name"; 
    MySqlConnection mysqlconn_to_db = new MySqlConnection(connectionstring); 
     try 
     { 
      mysqlconn_to_db.Open(); 
      using (MySqlCommand command = new MySqlCommand(query, mysqlconn_to_db)) 
      { 
       command.ExecuteNonQuery(); 

       using (MySqlDataAdapter adapter = new MySqlDataAdapter(command)) 
       { 
        DataTable datatable = new DataTable(); 
        adapter.Fill(datatable); 


        if (this.InvokeRequired) 
        { 
         this.Invoke(new MethodInvoker(delegate() 
         { 
          dataGridView1.DataSource = datatable; 
          dataGridView1.Refresh(); 
          label2.Text = dataGridView1.Rows[Convert.ToInt16(label1.Text)].Cells[0].Value.ToString(); 
         })); 
        } 
        else 
        { 
         dataGridView1.DataSource = datatable; 
         dataGridView1.Refresh();       
         label2.Text = dataGridView1.Rows[Convert.ToInt16(label1.Text)].Cells[0].Value.ToString(); 
        } 


       adapter.Dispose(); 
       } 

      } 
     } 
     catch (Exception ex) 
     { 
      messagebox(ex.Message); 
     } 


    } 

bscan2()メソッドは、異なるクエリと異なるデータグリッドビューを持つbscan()メソッドとほぼ同じです。もっと効率的なやり方がありますか?

答えて

0

あなたのBackgroundWorkerソリューションは必ずしも悪い方法ではありませんが、C#で非同期プログラミングを処理するための新しく改良された方法があります。あなたはasync and awaitを調べることを強くお勧めします。 1つのメソッドが完了するのを待っていると思われないので、この場合には達成しようとしているものに直接適用されない可能性があります。したがって、Task Parallel Library (TPL)、特にTask.Run()を調べることもおすすめします。具体的には非同期クエリを扱うためのものであるParallel LINQと呼ばれるものもあります。

関連する問題