OutOfMemoryException из-за создания потока - C#

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

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

Здравствуйте, Я разработала в консольном приложении игру-змейка, она работает хорошо некоторое время, но потом выбрасывает вышеупомянутое исключение, Я так понимаю происходит это из-за того, что я создаю для получения ответа с клавиатуры отдельный поток(куда двигаться змейке), этот поток инициализируется каждый раз при перерисовке змейки, в этом кроется проблема, вот хочу спросить, как лучше сделать, чтоб и змейка рисовалась и параллельно обрабатывать ответ с клавиатуры, Спасибо заранее, внизу выкладываю сам код,
       public void DrawSnake()
        {
            bool ok = true;
            while (ok)
            {
                ThreadStart TStart = new ThreadStart(GetCurrentDirection);
                Thread MyThread = new Thread(TStart);
                MyThread.Start();
                Console.Clear();
 
                for (int i = 0; i < 10; i++)
                {
                    if (snake[0].x == catchMe.x && snake[0].y == catchMe.y)
                        RandomPosition();
 
                    Console.SetCursorPosition(snake[i].x, snake[i].y);
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.WriteLine("*");
                }
                 Thread.Sleep(50);
}

Решение задачи: «OutOfMemoryException из-за создания потока»

textual
Листинг программы
private void GetCurrentDirection()
{
     while(true)
     {
            info = Console.ReadKey(true);
            if (info.Key == ConsoleKey.UpArrow)
            {
                direction = Direction.Up;
            }
            else if (info.Key == ConsoleKey.RightArrow)
            {
                direction = Direction.Forward;
            }
            else if (info.Key == ConsoleKey.LeftArrow)
            {
                  direction = Direction.Back;
              }
            else if (info.Key == ConsoleKey.DownArrow)
            {
                direction = Direction.Down;
            }
            else if (info.Key == ConsoleKey.Escape)
            {
                direction = Direction.Finish;
            }
      }
}

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


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

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

14   голосов , оценка 4.214 из 5