Передача параметров пулу потоков - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день Всем) В общем столкнулся с трудностью передачи параметров в пул потоков.
Листинг программы
  1. class Program
  2. {
  3. static void Main()
  4. {
  5. for (int i = 0; i < 20; i++)
  6. ThreadPool.QueueUserWorkItem(JobForAThread); // это работает, когда не передаём никакой параметр
  7. ThreadPool.QueueUserWorkItem(new WaitCallback(JobForAThread(5))); //так и никак не работает, если появляется параметр.
  8. Console.ReadLine();
  9. }
  10. static void JobForAThread(object state) //должно быть всё в порядке - тип переменной object
  11. {
  12. for (int i = 0; i < 3; i++)
  13. {
  14. Console.WriteLine("цикл {0}, выполнение внутри потока из пула {1}",
  15. i, Thread.CurrentThread.ManagedThreadId);
  16. Console.WriteLine(state);
  17. }
Если всё же это невозможно, тогда прошу подсказать приём, которым можно открыть множество потоков(массив потоков?):
Листинг программы
  1. public class Potoc
  2. {
  3. Thread thrd; //поток для сложного устройства
  4. public Potoc(string name, int ID) //Конструктор получает имя функции-потока и ID устройства
  5. {
  6. thrd = new Thread(this.Loker); //натравливаем поток на функцию
  7. thrd.Name = name; //передаём имя
  8. thrd.Start(ID);//передача параметра в поток
  9. }
  10. void Loker(object ID) //сама функция которая генерит сообщения для сложных устройств
  11. {
  12. ...
  13. }
  14. static void Main()
  15. {
  16. Potoc p1 = new Potoc("Potoc 1", 21); //объявляем, описываем и стартуем поток.
  17. Potoc p2 = new Potoc("Potoc 2", 22); // как это сделать не тысячей строк, а в цикле? С параметрами передающимися в функцию не беда справится, а как быт с названием типа "p1" ?
Всем спасибо за внимание!

Решение задачи: «Передача параметров пулу потоков»

textual
Листинг программы
  1.   using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Threading;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Windows.Forms;
  10.  
  11. namespace exampleC
  12. {
  13.     public partial class Form1 : Form
  14.     {
  15.         private List<ThreadInfo> thrInf = new List<ThreadInfo>();
  16.         private List<string> names = new List<string>();
  17.         private List<int> lstid = new List<int>();
  18.  
  19.         public Form1()
  20.         {
  21.             InitializeComponent();
  22.         }
  23.  
  24.         private void Thre(object o)
  25.         {
  26.             ThreadInfo thr = (ThreadInfo)o;
  27.         }
  28.  
  29.         private void button1_Click(object sender, EventArgs e)
  30.         {
  31.             for (int i = 0; i < lstid.Count; i++)
  32.             {
  33.                 ThreadInfo thr = new ThreadInfo();
  34.                 thr.ID = lstid[i];
  35.                 thr.name = names[i];
  36.                 thr.thread = new Thread(Thre);
  37.                 thr.thread.Name = thr.name;
  38.                 thr.thread.Start(thr);
  39.             }
  40.         }
  41.  
  42.  
  43.         private class ThreadInfo
  44.         {
  45.             public Thread thread;
  46.             public string name;
  47.             public int ID;
  48.         }
  49.     }
  50. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.267 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут