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