0

Мне нужно окрасить границу выбранного(RadioButton) ответа зеленым или красным в зависимости правильный ответ или нет. Пользователь выбирает ответ, жмет кнопку "далее" и его ответ должен подкраситься красным или зеленым, по истечению 3 секунд должен загрузиться следующий вопрос. Все работает кроме подкраски границ выбранного ответа. Как я понимаю это происходит из-за того что я усыпляю поток до того как обновляется UI. Как я могу решить эту проблему?

Вот код:

private void NextButton_Click(object sender, RoutedEventArgs e) //Событие на кнопку "Далее"
    {
        if (SelectedUserAnswer.Content.ToString() == CorrectAnswer) 
        {
            CorectAnswersCounter++;
            SelectedUserAnswer.BorderBrush = new SolidColorBrush(Colors.Green);
        }
        else
        {
            SelectedUserAnswer.BorderBrush = new SolidColorBrush(Colors.Red);
        }
        Thread.Sleep(3000);
        SelectedUserAnswer.BorderBrush = new SolidColorBrush(Colors.White);
        LoadNextQuest(); //Здесь заполняю контролы данными из следующего вопроса
        CurrentQuest++;
    }
Denis
  • 43
  • 6
  • 2
    Если у вас есть возможность использовать асинхронную версию события async void NextButton_ClickAsync, то используйте её и замените Thread.Sleep на await Task.Delay, кажется этого должно сработать. – CrazyElf Oct 23 '22 at 10:14
  • 2
    @CrazyElf Спасибо, это работает! – Denis Oct 23 '22 at 10:34
  • Задайте себе вопрос: Задать цвет UI контролу, это данные или дизайн? Очевидно, что последнее. Так почему вы это пытаетесь сделать через C# код, где место только данным? Не должно у вас быть в WPF проекте хоть какого либо обращения через имена контролов, вообще не должно быть, если только это не сам контрол. В WPF сама суть - это привязки и XAML, если вы этим пренебрегаете, то у вас сразу, автоматом что-то идет не так. Примерно такое у вас должно быть, где в C# лишь одно свойство, а в XAML через триггеры нужные цвета. Thread тоже забывайте. – EvgeniyZ Oct 23 '22 at 10:34
  • @EvgeniyZ Спасибо за рекомендации. Я все это прекрасно понимаю, просто у меня сейчас цель лишь бы работало, а не сделать идеальное приложение с точки зрения архитектуры, дизайна и т.д. Я не кайфую, когда пишу такой "код", но обстоятельства вынуждают. – Denis Oct 23 '22 at 10:43
  • @Denis Еще один... Это отмазка, вы ведь понимаете? То, что я вам скинул, как по мне даже проще, чем то, что делаете вы, главное понять. А нет времени и прочего - ну, я вас ведь не заставляю, это ваша жизнь и ваша судьба, если бы мне с самого начала сказали, как делать правильно, я был бы очень благодарен тому человеку, ведь я сам кучу времени потратил на такие костыли, какие делаете сейчас вы. Я не знаю ваших желаний, может вы хотите тупо получить корочку и в будущем сменить профессию, если да, ну, делайте тяп-лям, а если нет, начните учиться сразу правильным вещам, вот и все. – EvgeniyZ Oct 23 '22 at 10:50
  • @EvgeniyZ Вы не знаете всей ситуации и делаете какие-то выводы. И разъяснять эту ситуацию я не вижу смысла. Пришел я сюда получить ответ, на конкретно поставленный вопрос. Вы же начинаете отвечать на вопросы которых здесь нет. Когда здесь будет вопрос "Как мне переписать весь проект с нуля, что бы границы кнопки меняли цвет?" или "Учиться или не учиться правильно? Как вообще устроить свою жизнь и отношения?", то тогда милости прошу. – Denis Oct 23 '22 at 13:01
  • @Denis Я на вас не наезжал, убавьте тон. Я здесь лишь для того, чтобы направить вас и будущих читателей на верный путь, указать на ошибки, чтоб человек хотяб понял, что делает что-то не так. Я не заставляю вас переписывать проект, мне без разницы что у вас там. на вопросы, которых здесь нет - ошибаетесь, зуб тоже можно удалить по-разному, стукнуть молотком допустим, или сходить к врачу, два варианта решения задачи, только первое имеет последствия, а второе более проверенное и правильное решение. Вот я вам посоветовал "врача", а вы используете "молоток" отмахиваясь некими "обстоятельствами". – EvgeniyZ Oct 23 '22 at 13:29
  • 1
    @EvgeniyZ Я всего лишь поблагодарил вас за рекомендации, после чего услышал "Еще один... Это отмазка, вы ведь понимаете?" и прочие нравоучения. Да, я понимаю что зуб можно удалить по разному и с разными последствиями, и я вам об этом написал выше - "Я все это прекрасно понимаю". Опираясь на обстоятельства я сделал свой выбор и пришел сюда, что бы мне подали "молоток". И вы не знаете на сколько у меня острая боль(обстоятельства), что бы осуждать меня и мое решение с "молотком". Еще раз спасибо за вариант с "врачом". – Denis Oct 23 '22 at 14:26
  • @Denis Я поясню вам к чему было "Еще один... Это отмазка, вы ведь понимаете?" - про еще одного я просо за последнее время, даже тут, на SO очень часто слышу "ой, у меня времени нет", "нет сил", "нет желания" и прочие отговорки, а если взять тот факт, что сейчас время "студентов", то я посчитал вас именно таким, кто учится, делает "домашку", но вместо попытки понять, делает костыли, чтоб "авось" дали зачет, вот и все. Если вас это оскорбило или еще что, ну чтож, извините. подали "молоток" - не забывайте, что вы не один на это сайте, вам не надо, а другим надо, почему это надо - я пояснил. – EvgeniyZ Oct 23 '22 at 14:34
  • 1
    Что касается "врача" - текущая задача решается ~10 переделанными строками, вот и все, а вы посчитали непойми почему, что это "переписывание всего проекта", даже не попробовав понять суть правильного подхода, вот из-за этого у нас с вами сейчас и спор. Повторюсь, я не заставляю вас, мне без разницы что у вас там, я лишь отвечаю на ваши сообщения, обосновывая свою точку зрения. Не хотите продолжение диалога - ну чтож, не пишите. – EvgeniyZ Oct 23 '22 at 14:36
  • @EvgeniyZ Я не студент и не из тех, кто не желает учиться и понимать как правильно. В данный момент, при данных обстоятельствах мне подходит решение CrazyElf, так как оно быстрое и точечное. Извиняюсь, что не позаботился о других кому надо. – Denis Oct 23 '22 at 15:10

0 Answers0