Arhn - архитектура программирования

Hot для предотвращения события по умолчанию при нажатии кнопки

У меня есть событие нажатия кнопки

private void AnswerPressAction(object sender, RoutedEventArgs e)
    {
        Button button = (Button)sender;
        Button validButton = null;
        string buttonName = button.Name;
        button.Background = new SolidColorBrush(Colors.Yellow);
        System.Threading.Thread.Sleep(1000);
        int presedAnswer = 0;
        switch (buttonName)
        {
            case "buttonAnswer1":
                presedAnswer = 1;
                break;
            case "buttonAnswer2":
                presedAnswer = 2;
                break;
            case "buttonAnswer3":
                presedAnswer = 3;
                break;
            case "buttonAnswer4":
                presedAnswer = 4;
                break;
        }

        switch (_valid_answer)
        {
            case 1:
                validButton = buttonAnswer1;
                break;
            case 2:
                validButton = buttonAnswer2;
                break;
            case 3:
                validButton = buttonAnswer3;
                break;
            case 4:
                validButton = buttonAnswer4;
                break;
        }



        if (presedAnswer != 0 && presedAnswer == _valid_answer)
        {
            button.Background = new SolidColorBrush(Colors.Green);
            System.Threading.Thread.Sleep(1000);
            CreateQuestion(1);
        }
        else
        {
            button.Background = new SolidColorBrush(Colors.Red);
            validButton.Background = new SolidColorBrush(Colors.Green);
            System.Threading.Thread.Sleep(1000);
            _gameLevel = 0;
        }
    }

и я изменю цвет кнопки в этой функции, но кнопка нажата, и я не могу изменить цвет (кнопка активна/нажата).

как сделать javascript e.preventDefault() или запустить это событие до нажатия кнопки, когда кнопка не активна?


  • или, пожалуйста, скажите мне, как запустить мой метод после этого события 04.01.2016
  • Почему вы делаете Thread.Sleep(1000); звонки? 04.01.2016
  • Я хочу изменить цвет, остаться на 1 секунду и после изменить цвет снова. Это похоже на игру Кто хочет стать миллионером? 04.01.2016
  • Вы спите в потоке пользовательского интерфейса, поэтому он не может обновить цвет. Вам нужно позволить потоку пользовательского интерфейса завершить метод, прежде чем цвет изменится. 04.01.2016
  • Попробуйте использовать этот код для установки presedAnswer: int presedAnswer = int.Parse(buttonName.Substring("buttonAnswer".Length)); 04.01.2016
  • Попробуйте использовать этот код для установки ``: var buttonAnswers = new[] { buttonAnswer1, buttonAnswer2, buttonAnswer3, buttonAnswer4, }; validButton = buttonAnswers[_valid_answer - 1]; 04.01.2016
  • Да, вы правы, но жарко запускать этот код другим методом? асинхронный? 04.01.2016
  • Ответ Питера Торра в этом случае правильный. 04.01.2016

Ответы:


1

Проблема в том, что вы блокируете поток вызовом Sleep. Если вы хотите ввести задержку, загляните в Task.Delay метод. Вам нужно будет немного узнать о методах async (множество примеров в MSDN или вы можете искать SO).

Скорее всего, вам потребуется отключить пользовательский интерфейс на время задержки, поскольку задержка позволяет продолжать обновлять пользовательский интерфейс (и отображать желаемое изменение цвета), но также позволяет пользователю взаимодействовать с пользовательским интерфейсом (например, щелкнуть значок кнопку второй раз или нажмите другую кнопку). Здесь поможет свойство Enabled.

04.01.2016
  • Спасибо, попробую использовать asyc, думаю есть другое решение 04.01.2016
  • @ned - Использование async здесь довольно изящное решение. Какое другое решение вы думаете об использовании? 04.01.2016
  • @Enigmativity, я новичок, мне сначала нужно научиться запускать асинхронный метод ))) 04.01.2016
  • Если вам нужно альтернативное решение, посмотрите на DispatcherTimer (но это сложнее). 04.01.2016
  • @ned — это может быть так же просто, как вызвать await Task.Delay(TimeSpan.FromSeconds(1.0)); внутри метода async. 04.01.2016
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..