Проблема с многопоточностью: закрывается программа
Пишу змейку на WPF. Всё просто: сетка grid и зелёная точка (голова змеи). Хочу чтобы змейка, а для начала хотя бы её без брюшная часть, двигалась в заданном направлении, а при нажатии клавиш передвижения менялось направление её движения. Движение змейки хочу сделать в отдельный поток: змейка двигается постоянно, а в другом потоке обрабатывалось событие нажатия клавиши для смены направления.
int x = 6;
int y = 6;
enum Direction
{
Left = 1, Right = 2,
Up = 3, Down = 4, Stop = 0
}
Direction DirectionMove;
public MainWindow()
{
InitializeComponent();
DirectionMove = Direction.Right;
StartPosition(x, y);
Thread moveSnake = new Thread(MoveSnake);
moveSnake.Start();
}
public void MoveSnake()
{
Random rnd = new Random();
int r = rnd.Next(1, 13);
Grid.SetColumn(SnakeHead, r);
}
Запускаю поток в MainWindow. Когда собираю проект не выдаёт никаких ошибок и пишет об успешной компиляции, но не появляется окна приложения.
Как угодно меняю код метода MoveSnake, но игра разве что может начать запускаться ненадолго и закрываться.
public void MoveSnake()
{
int i = 0;
while (i < 5)
{
i++;
Grid.SetColumn(SnakeHead, i);
}
}
Ощущение, будто после выполнения действий в потоке программа прекращает жизнь
Источник: Stack Overflow на русском