0

Рабочее окно программы

Здравствуйте! У меня есть программный код на языке C# (см. скриншот). Мне необходимо после нажатия на кнопку "Включить компьютер" показать пользователю, как увеличивается температура, к примеру, от 0 до 30, чтобы пользователь прям видел 1, 2, 3, 4 и так далее.

Прежде чем писать, я пробовал различные способы: через цикл, с использованием Thread.Sleep(). Однако программа зависает или выдаёт последнее значение.

У меня label с температурой это label7.

        private void button1_Click(object sender, EventArgs e)
    {
        // что здесь нужно реализовать, чтобы пользователь видел изменение температуры на каждый градус
        label7.Text = "Температура: " + temperature;
}

Температуру храню в переменной: temperature; первоначально переменная равна нулю.

  • Нельзя подвешивать GUI, обработчик события должен максимально быстро вернуть управление. Если по-старинке, то можете по клику включить backgroungWorker и в нём спать в Thread.Sleep и менять lable, только BeginInvoke не забыть когда элементы GUI трогаете. Но лучше сделать асинхронный обработчик клавиши, тогда можете там и цикл в принципе сделать с await Task.Delay внутри, если я ничего не путаю. Но ещё лучше - таск отдельный запустить из асинхронного обработчика и всё делать там, так будет совсем правильно. – CrazyElf Mar 21 '23 at 15:13
  • По асинхронищине смотрите ссылку вверху в синем блоке. Про алгоритм поведения, попробуйте Конечный автомат https://ru.stackoverflow.com/a/1382349/373567 – aepot Mar 21 '23 at 15:23
  • @aepot здравствуйте, вы мне помогли! Спасибо. Хотел задать дополнительный вопрос: при нажатии на кнопку у меня начинает выполняться асинхронная функция. При клике, допустим, "выключить компьютер" мне нужно остановить эту функцию. Как это можно сделать, чтобы она перестала выполняться при клике на другую кнопку? – Данил Лазорин Mar 21 '23 at 19:22
  • Я же вам дал решение, там 2 метода StartLoop и StopLoop - надо ли объяснять, что они делают? – aepot Mar 21 '23 at 19:43
  • @aepot я использовал эту ссылку: https://ru.stackoverflow.com/questions/1112087/ я видать не до конца понял, как прервать выполнение асинхронной функции при нажатие на кнопку? – Данил Лазорин Mar 21 '23 at 20:05
  • Вторую смотрите, вы задаете вопрос, на который уже дан ответ. – aepot Mar 21 '23 at 20:29
  • @aepot Спасибо ещё раз, ссылка только сейчас мне отобразилась, где ответ дан. До этого её не было. Благодарю вас. – Данил Лазорин Mar 22 '23 at 08:31

0 Answers0