C# 多线程信息

C# 多线程信息,c#,multithreading,C#,Multithreading,我正在尝试使用线程,但我有一些问题(我是线程初学者) 我的密码是这样的。我有一个表单中的数据集,我想从数据库和克里特适配器中获取一些tablequery,并在表单中填充数据集 Dataset mydataset=new DataSet(); private void Form_Load(object sender,eventargs e) { SqlConnection con=new SqlConnection("constring"); SqlDataAdapter adap

我正在尝试使用线程,但我有一些问题(我是线程初学者)

我的密码是这样的。我有一个表单中的数据集,我想从数据库和克里特适配器中获取一些tablequery,并在表单中填充数据集

Dataset mydataset=new DataSet();
private void Form_Load(object sender,eventargs e)
{
    SqlConnection con=new SqlConnection("constring");
    SqlDataAdapter adap=new SqlDataAdapter("select * from Tables");
    DataTable dt=new DataTable();
    adap.Fill(dt);

    foreach(DataRow dr in dt.Rows)
    {
        ThreadStarter mystarter=delegate{ CreateTable(dr); };
        Thread mythread=new Thread();
        mythread.Start();
    }
}

void CreateTable(DataRow dr)
{
    SqlDataAdapter adap2=new SqlDataAdapter(dr["Query"].toString(),con);
    ada2.Fiil(myDataSet);
}
当我使用这段代码时,我得到一个错误,比如“已经有SqlDataReader for closed first”
我能做什么?

我想你需要解释一下你想在这里做什么。看起来您正在打开一个表列表,然后尝试并行加载所有这些表中的所有数据,但都加载到同一个对象中。。。那没有多大意义


值得一提的是,错误似乎在于您正在创建多个数据适配器,这些适配器将同时使用同一个数据库连接—您不能这样做。如果您真的想并行加载所有这些数据,您需要与数据库建立多个连接。

A
SqlConnection
连接一次只支持一个命令(和一个读卡器)。多个线程不能同时访问它。因此,您需要在每个线程中创建一个separae
SqlConnection
实例。

“我得到了一个类似这样的错误”-告诉我们您得到的实际错误肯定不会太麻烦吧?我想知道粘贴的代码是如何编译的,甚至是如何工作的。ThreadStarter应该是ThreadStartDelegate,new Thread()应该是new Thread(mystarter),您正试图使用以形式_load()声明的“con”变量,并且您正在另一个线程中调用的另一个函数中访问它。