/// <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; // Разрешаем обработку событий }