Потоки с параметрами - C#

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

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

Добрый вечер! Пытаюсь работать с потоками,которые имеют функцию с 5-ю парамерами. Программу сделал,но при работе она вылетает с ошибкой "Индекс находился вне границ массива". Но при попытке пошаговой отладки клавишей F11 всё работает. Но массив в любом случае заполняется не полностью. В чём ошибка,и как исправить? И можно ли вернуть результат функции из какого либо потока?(если функцию изменить) код:
Листинг программы
  1. using System;
  2. using System.Threading;
  3. namespace ConsoleApplication1
  4. {
  5. class Program
  6. {
  7. static void Main(string[] args)
  8. {
  9. int number = 1;
  10. Console.WriteLine("Во сколько потоков заполнять?");
  11. number=Convert.ToInt32(Console.ReadLine());
  12. int[,] massiv = new int[101, 101];
  13. int chislo = 100 / number; //определяем диапазон заполнения для одного потока
  14. int last=0,next=chislo; //переменные для начального индекса и конечного индекса заполнения массива
  15. Thread[] threads = new Thread[number];
  16. for (int e = 0; e < threads.Length; e++)
  17. {
  18. threads[e] = new Thread(delegate() { vvodmas(last, last, next, next, massiv); }); //нашёл на форумах-передача функции с параметрами в поток
  19. threads[e].Start(); //запуск потока
  20. last = next; //началом становится последний индекс массива,который будет обрабатывать предыдущий поток
  21. next += chislo; //конец-текущий элемент+размерность
  22. }
  23. for (int i = 0; i < massiv.GetLength(0);i++ )
  24. {
  25. for (int j = 0; j < massiv.GetLength(1);j++ )
  26. {
  27. Console.WriteLine("Элемент {0}", massiv[i, j]); //вывод массива
  28. }
  29. }
  30. }
  31. static void vvodmas(int q, int w, int a, int s, int[,] m)
  32. {
  33. Random rnd = new Random();
  34. for (int i = q; i < a; i++)
  35. {
  36. for (int j = w; j < s; j++)
  37. {
  38. m[i, j] = rnd.Next(0, 100); //заполнение диапазона случайными числами
  39. }
  40. }
  41. }
  42. }
  43. }
Тема не сильно важная,но возможно пригодится мне в будущем.

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

textual
Листинг программы
  1.     class Program
  2.     {
  3.         private static event Action someEvenet;
  4.         private static void Main(string[] args)
  5.         {
  6.             Console.Write("Main thread: ");
  7.             PrintCurrentThread();
  8.             someEvenet += () =>
  9.                 {
  10.                     Console.Write("Event thread: ");
  11.                     PrintCurrentThread();
  12.                 };
  13.             Thread thread = new Thread(() => someEvenet());
  14.             thread.Start();
  15.  
  16.             Thread.Sleep(10000);
  17.         }
  18.  
  19.         private static void PrintCurrentThread()
  20.         {
  21.             Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
  22.         }
  23.     }

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


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

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

13   голосов , оценка 4.154 из 5

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

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

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