Передача параметров пулу потоков - 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; } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д