Потоки с параметрами - 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);
        }
    }

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


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

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

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