Передача параметров пулу потоков - C#
Формулировка задачи:
Добрый день Всем)
В общем столкнулся с трудностью передачи параметров в пул потоков.
Если всё же это невозможно, тогда прошу подсказать приём, которым можно открыть множество потоков(массив потоков?):
Всем спасибо за внимание!
class Program
{
static void Main()
{
for (int i = 0; i < 20; i++)
ThreadPool.QueueUserWorkItem(JobForAThread); // это работает, когда не передаём никакой параметр
ThreadPool.QueueUserWorkItem(new WaitCallback(JobForAThread(5))); //так и никак не работает, если появляется параметр.
Console.ReadLine();
}
static void JobForAThread(object state) //должно быть всё в порядке - тип переменной object
{
for (int i = 0; i < 3; i++)
{
Console.WriteLine("цикл {0}, выполнение внутри потока из пула {1}",
i, Thread.CurrentThread.ManagedThreadId);
Console.WriteLine(state);
}public class Potoc
{
Thread thrd; //поток для сложного устройства
public Potoc(string name, int ID) //Конструктор получает имя функции-потока и ID устройства
{
thrd = new Thread(this.Loker); //натравливаем поток на функцию
thrd.Name = name; //передаём имя
thrd.Start(ID);//передача параметра в поток
}
void Loker(object ID) //сама функция которая генерит сообщения для сложных устройств
{
...
}
static void Main()
{
Potoc p1 = new Potoc("Potoc 1", 21); //объявляем, описываем и стартуем поток.
Potoc p2 = new Potoc("Potoc 2", 22); // как это сделать не тысячей строк, а в цикле? С параметрами передающимися в функцию не беда справится, а как быт с названием типа "p1" ?Решение задачи: «Передача параметров пулу потоков»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Threading;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace exampleC
{
public partial class Form1 : Form
{
private List<ThreadInfo> thrInf = new List<ThreadInfo>();
private List<string> names = new List<string>();
private List<int> lstid = new List<int>();
public Form1()
{
InitializeComponent();
}
private void Thre(object o)
{
ThreadInfo thr = (ThreadInfo)o;
}
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < lstid.Count; i++)
{
ThreadInfo thr = new ThreadInfo();
thr.ID = lstid[i];
thr.name = names[i];
thr.thread = new Thread(Thre);
thr.thread.Name = thr.name;
thr.thread.Start(thr);
}
}
private class ThreadInfo
{
public Thread thread;
public string name;
public int ID;
}
}
}