Потоки с параметрами - C#
Формулировка задачи:
Добрый вечер!
Пытаюсь работать с потоками,которые имеют функцию с 5-ю парамерами.
Программу сделал,но при работе она вылетает с ошибкой "Индекс находился вне границ массива".
Но при попытке пошаговой отладки клавишей F11 всё работает.
Но массив в любом случае заполняется не полностью. В чём ошибка,и как исправить? И можно ли вернуть результат функции из какого либо потока?(если функцию изменить)
код:
Тема не сильно важная,но возможно пригодится мне в будущем.
using System; using System.Threading; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { int number = 1; Console.WriteLine("Во сколько потоков заполнять?"); number=Convert.ToInt32(Console.ReadLine()); int[,] massiv = new int[101, 101]; int chislo = 100 / number; //определяем диапазон заполнения для одного потока int last=0,next=chislo; //переменные для начального индекса и конечного индекса заполнения массива Thread[] threads = new Thread[number]; for (int e = 0; e < threads.Length; e++) { threads[e] = new Thread(delegate() { vvodmas(last, last, next, next, massiv); }); //нашёл на форумах-передача функции с параметрами в поток threads[e].Start(); //запуск потока last = next; //началом становится последний индекс массива,который будет обрабатывать предыдущий поток next += chislo; //конец-текущий элемент+размерность } for (int i = 0; i < massiv.GetLength(0);i++ ) { for (int j = 0; j < massiv.GetLength(1);j++ ) { Console.WriteLine("Элемент {0}", massiv[i, j]); //вывод массива } } } static void vvodmas(int q, int w, int a, int s, int[,] m) { Random rnd = new Random(); for (int i = q; i < a; i++) { for (int j = w; j < s; j++) { m[i, j] = rnd.Next(0, 100); //заполнение диапазона случайными числами } } } } }
Решение задачи: «Потоки с параметрами»
textual
Листинг программы
class Program { private static event Action someEvenet; private static void Main(string[] args) { Console.Write("Main thread: "); PrintCurrentThread(); someEvenet += () => { Console.Write("Event thread: "); PrintCurrentThread(); }; Thread thread = new Thread(() => someEvenet()); thread.Start(); Thread.Sleep(10000); } private static void PrintCurrentThread() { Console.WriteLine(Thread.CurrentThread.ManagedThreadId); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д