如何在c#中使用ParameterizedThreadStart我想让线程采用void方法,这个方法采用sqlconnection?
答案 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
传递给线程并不是最佳解决方案。在线程方法中创建它将是一个更明智的选择,并改为传递连接字符串(或使连接字符串成为类的静态成员)。