2017-12-21 12 views
0

다른 스레드에서 실제로 같은 시간에 더 많은 쿼리를 실행하고 싶습니다. 이 문제를 해결하기 위해 배경 작업자를 사용하고 있습니다! 내 질문은 : UI 요소를 위임하는 더 좋은 방법이 있습니까? 아니면 내가 한 것처럼 올바른 것입니까?동시에 두 개 이상의 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() 메서드는 다른 쿼리와 다른 datagridview를 사용하는 bscan() 메서드와 거의 같습니다. 그것을 할 수있는보다 효율적인 방법이 있습니까?

답변

0

귀하의 BackgroundWorker 솔루션은 반드시 나쁜 것은 아니지만 C#에서 비동기 프로그래밍을 처리 할 수있는 새롭고 향상된 방법이 있습니다. async and await을 살펴볼 것을 적극 권장합니다. 이 방법은 하나의 방법이 완료 될 때까지 기다리지 않으므로 Task Parallel Library (TPL), 특히 Task.Run()을 조사하는 것이 좋습니다.이 경우 달성하려는 작업에 직접 적용되지 않을 수 있습니다. 특히 Parallel LINQ이라는 비동기 쿼리를 처리하기위한 것이 있습니다.

관련 문제