如何运行两个或多个sql同时查询?

How to run two or more sql query at the same time?

我想 运行 在不同线程中同时查询更多。我正在使用 backgroundworkers 来解决这个问题!我的问题是:是否有更好的方法来委托 UI 元素,或者它是否像我那样正确?

    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() 几乎相同,只是不同的查询和不同的 datagridview。有没有更有效的方法,或者可以吗?

您的 BackgroundWorker 解决方案不一定是一个糟糕的解决方案,但有新的和改进的方法来处理 C# 中的异步编程。强烈建议您查看专门用于处理异步查询的 async and await. That may not apply quite so directly to what you're trying to accomplish in this case since you don't seem to want to wait for one method to complete, so it's also recommended that you look into the Task Parallel Library (TPL), and particularly Task.Run(). There's even something called Parallel LINQ