Почему я не могу передать в поточную функцию очередь?

У меня есть очередь, в ней хранятся данные. Эти данные я хочу передать в 300 потоков, но у меня выскакивает ошибка... Что я делаю не так? (На питоне такое работало без ошибок)

lass Program
{
    static void Main(string[] args)
    {
        string[] lines = File.ReadAllLines("dannie.txt");
        Queue<string> q = new Queue<string>();
        
        // Добавляем список данных в очередь
        foreach (string ptf in lines)
        {
            q.Enqueue(ptf);
        }

        for (int i = 0; i < 300; i++)
        {
            // тут возникает ошибка
            Thread myThread = new Thread(check_in);
            myThread.Start(q);
            // check_in(q);
        }
        
    }

    private  void check_in(Queue<string> q)
    {

        while (q.Count != 0) {
            string dannie = q.Dequeue();
            string[] dannies = dannie.Split(":");

            string username = dannies[0];
            string password = dannies[1];

            int error;
            error = check(username, password);

            Console.WriteLine(error);

            while (error == 1)
            {
                error = check(username, password);
                Console.WriteLine(error);
            }
        }
        Console.WriteLine("Поток закончил работу.");
    }

Ошибка вот такая: Ошибка CS1503 Аргумент 1: не удается преобразовать из "группа методов" в "ParameterizedThreadStart".


Ответы (1 шт):

Автор решения: VladD

Лучше воспользоваться лямбдами, и писать так:

Thread myThread = new Thread(() => check_in(q));
myThread.Start();

Кстати, стандартная очередь непотокобезопасна. Используйте, например, ConcurrentQueue<string>:

void check_in(ConcurrentQueue<string> q)
{
    while (q.TryDequeue(out dannie))
    {
        string[] dannies = dannie.Split(":");
        // ...
    }
    Console.WriteLine("Поток закончил работу.");
}
→ Ссылка