сделать поток с методом взять соединение SQL - PullRequest
0 голосов
/ 13 мая 2010

как использовать ParameterizedThreadStart в c # Я хочу, чтобы потоки принимали метод void, а этот метод - sqlconnection?

Ответы [ 3 ]

3 голосов
/ 13 мая 2010

Во-первых, это, вероятно, не лучшая идея. Не передавайте объекты SqlConnection между потоками. Невозможно сказать, какие ужасные ошибки появятся таким образом.

Во-вторых, вы передаете свои параметры методу Start (). Вместо того, чтобы передавать SqlConnection, я предлагаю вместо этого передать строку соединения и создать SqlConnection для каждого потока.

1 голос
/ 13 мая 2010

Делегат ParameterizedThreadStart принимает только параметр Object, поэтому метод должен соответствовать этому. Вы должны привести Object ссылку к SqlConnection в методе:

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

При вызове вам не нужно специально приводить SqlConnection к Object, что делается неявно:

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

Однако вы можете подумать, что метод должен создать свое собственное соединение. Объект подключения не является потокобезопасным, поэтому вы не можете использовать один и тот же объект подключения более чем в одном потоке одновременно.

0 голосов
/ 13 мая 2010

Вот подход C # 3.0

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

Как уже упоминалось, передача SqlConnection в поток - не лучшее решение. Было бы разумнее создать его внутри метода потока и вместо него передать строку подключения (или сделать строку подключения статическим членом класса).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...