Отложеный запуск потока с параметрами - C#
Формулировка задачи:
Есть несколько устройств, для работы с которыми создается соответствующее число потоков. Потоки складирую в Dictionary, после этого в нужное время запускаю.
Собственно код-пример:
При клике на button2 в текстбоксе logtb появляется "Device 2, Device 2". Нужно, чтобы было "Device 1, Device 2".
Вопрос - как это реализовать? Также не доконца понимаю, почему результат именно "2, 2". Если можно, объясните на пальцах плз.
Если вместо delegate() { DoWork(device); }) сделать new ParameterizedThreadStart(DoWork), а метод DoWork сделать принимающим в качестве параметра object, то все начинает работать как надо, но проблемма в том, что передать параметры я могу только при нажатии на button1, т.е. параметров запуска в методе button2_Click у меня нет.
Dictionary<string, Thread> deviceThreads = new Dictionary<string, Thread>(); string[] Devices = new string[] { "Device 1", "Device 2" }; private void button1_Click(object sender, EventArgs e) { foreach (string device in Devices) deviceThreads.Add(device, new Thread(delegate() { DoWork(device); })); } private void button2_Click(object sender, EventArgs e) { foreach (string device in Devices) { deviceThreads[device].IsBackground = true; deviceThreads[device].Start(); } } public void DoWork(string deviceID) { Thread.Sleep(2000); Log(deviceID); } private void Log(string str) { logtb.BeginInvoke(new Action(delegate() { logtb.Text += str + ", "; })); }
Решение задачи: «Отложеный запуск потока с параметрами»
textual
Листинг программы
foreach (string device in Devices) { var d = device; deviceThreads.Add(device, new Thread(delegate() { DoWork(d); })); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д