Example #1
0
        /// <summary>
        /// Потокобезопасная обработка движения игрового поля, не блокирующая UI поток
        /// </summary>
        /// <param name="direction"></param>
        async void Move_s(Game.SlideDirection direction)
        {
            // Если какие-то процессы отрисовки не закончены,
            // либо неверное состояние экземпляра игры - не обрабатываем нажатие
            if (!canMove || game == null || !game.IsGameActive)
            {
                return;
            }

            canMove = false; // Запрещаем обработку событий во избежание ошибок

            // Асинхронно запускаем обработку движения в другом потоке, не блокируя UI поток
            await Task.Factory.StartNew(() =>
            {
                game.Move(direction);
            });

            canMove = true; // Разрешаем обработку событий
        }