用方法创建线程采用sql连接

时间:2010-05-13 09:46:33

标签: c# sql multithreading

如何在c#中使用ParameterizedThreadStart我想让线程采用void方法,这个方法采用sqlconnection?

3 个答案:

答案 0 :(得分:3)

首先,这可能不是最好的主意。不要在线程之间传递SqlConnection对象。不知道会以这种方式引入什么样的可怕错误。

其次,将参数传递给Start()方法。我建议不要传递SqlConnection而是传递连接字符串,并为每个线程构建一个SqlConnection。

答案 1 :(得分:1)

ParameterizedThreadStart委托只接受Object个参数,因此该方法必须与之匹配。您必须在方法中将Object引用转换为SqlConnection

public void Work(Object o) {
  SqlConnection conn = o as SqlConnection;
  ...
}

调用它时,您无需专门将SqlConnection强制转换为Object,这是隐式完成的:

Thread t = new Thread(Work);
t.Start(conn);

但是,您可能需要考虑该方法应该创建自己的连接。连接对象不是线程安全的,因此您不能一次在多个线程中使用相同的连接对象。

答案 2 :(得分:0)

这是一个C#3.0方法

using (SqlConnection connection = new SqlConnection("mydb"))
{
    Thread thread = new Thread(delegate()
    {
        connection.Open();
    });
    thread.Start();
}

如上所述,将SqlConnection传递给线程并不是最佳解决方案。在线程方法中创建它将是一个更明智的选择,并改为传递连接字符串(或使连接字符串成为类的静态成员)。