Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/34: Рейтинг темы: голосов - 34, средняя оценка - 4.74
3 / 3 / 0
Регистрация: 10.12.2017
Сообщений: 17

Не работает Thread.Sleep();

13.12.2017, 12:14. Показов 7047. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не работает задержка. Вернее она работает, но сначала программа делает задержку, а затем отображает текст.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if (Data.pin == pin_vvod)
            {
                label_pin_status.Text = "Отправка данных на сервер";
                System.Threading.Thread.Sleep(1500);
                label_pin_status.Text = "Оплата произошла успешно";
                System.Threading.Thread.Sleep(1500);
                Close();
            }
            else
            {
                label_pin_status.Text = "Отправка данных на сервер";
                System.Threading.Thread.Sleep(1500);
                label_pin_status.Text = "Вы ввели неверный ПинКод";
            }
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.12.2017, 12:14
Ответы с готовыми решениями:

ProgressBar и Thread.Sleep
Задание: 1 . Создание Windows приложения, которое демонстрирует асинхронную работу в фоновом режиме. Написать метод , выполнение...

Thread.Sleep совместно с BeginInvoke
Приветствую уважаемые! Вопрос следующий: имеем данные которые заполняются в потоке, заполнение DataGridView через делегата, чтобы...

Странное поведение Thread.Sleep
Эх, прошу помочь. В общем. Есть поток выполняющий эту функцию: { Begin: CoreInProcessing = true; for...

14
Эксперт .NET
 Аватар для Usaga
14126 / 9346 / 1350
Регистрация: 21.01.2016
Сообщений: 35,111
13.12.2017, 12:17
Sinjour, всё верно. Это потому, что ваша "задержка" останавливает выполнение цикла обработки сообщений (подкапотная тема), который и ответственнен за обновление UI. То, что вы в Text записали строку - ничего не значит, изменении будет отрисовано после того, как вы вернёте управление системе.
0
3 / 3 / 0
Регистрация: 10.12.2017
Сообщений: 17
13.12.2017, 12:19  [ТС]
А как мне исправить это? Или просто засунуть в два разных условия?
0
Эксперт .NET
 Аватар для Usaga
14126 / 9346 / 1350
Регистрация: 21.01.2016
Сообщений: 35,111
13.12.2017, 12:23
Sinjour, непонятно, что нужно исправлять.
0
Заблокирован
13.12.2017, 12:24
Sinjour, refresh и(ли) doevents не помогают?
0
Эксперт .NET
 Аватар для Usaga
14126 / 9346 / 1350
Регистрация: 21.01.2016
Сообщений: 35,111
13.12.2017, 12:27
Остап Бонд, как оно поможет, когда поток "на паузе"?))
0
Эксперт .NET
 Аватар для Rius
13084 / 7644 / 1670
Регистрация: 25.05.2015
Сообщений: 23,273
Записей в блоге: 14
13.12.2017, 12:47
Sinjour, надо сначала озвучить, что вы хотите получить изначально. А не то, что вы придумали для этого.
0
3 / 3 / 0
Регистрация: 10.12.2017
Сообщений: 17
13.12.2017, 12:54  [ТС]
Вывод первого сообщение, задержка 1-2 секунды, вывод второго, снова задержка и закрытие формы
0
Заблокирован
13.12.2017, 14:34
Может я чего не догоняю, но у меня обновляется label1 даже "когда поток "на паузе""
C#
1
2
3
4
5
6
7
8
9
10
    private void button1_Click(object sender, EventArgs e)
    {
      label1.Text = "Отправка данных на сервер";
      label1.Refresh();
      System.Threading.Thread.Sleep(1500);
      label1.Text = "Оплата произошла успешно";
      label1.Refresh();
      System.Threading.Thread.Sleep(1500);
      MessageBox.Show("+");
    }
0
Эксперт .NET
 Аватар для Rius
13084 / 7644 / 1670
Регистрация: 25.05.2015
Сообщений: 23,273
Записей в блоге: 14
13.12.2017, 14:36
Остап Бонд, догоняйте : это говнокод. Так не делается.
0
Заблокирован
13.12.2017, 14:50
Цитата Сообщение от Rius Посмотреть сообщение
это говнокод. Так не делается.
Но проблему ТС оно решило, кажется?
Покажите не г...окод, пожалуйста.
0
Эксперт .NET
 Аватар для Rius
13084 / 7644 / 1670
Регистрация: 25.05.2015
Сообщений: 23,273
Записей в блоге: 14
13.12.2017, 15:33
Лучший ответ Сообщение было отмечено Sinjour как решение

Решение

Например, так
C#
1
2
3
4
5
6
7
8
private async void button1_Click(object sender, EventArgs e)
{
    label1.Text = "Отправка данных на сервер";
    await Task.Delay(1500);
    label1.Text = "Оплата произошла успешно";
    await Task.Delay(1500);
    MessageBox.Show("+");
}
Хотя ТС так и не сказал, нафига ему это надо. Наверняка можно сделать лучше.

Во 2 посте ещё сказали, что так делать не надо. Если вы не догоняете, и пишете label1.Refresh() + Thread.Sleep(1500) или DoEvents() в обработчике события, то вы не понимаете, как работает окно. А при непонимании получается глючная программа.

Добавлено через 5 минут
Цитата Сообщение от Остап Бонд Посмотреть сообщение
Но проблему ТС оно решило, кажется?
То, что код с виду якобы решил проблему, не значит, что код хороший и это решение годное. На самом деле он может доставить ещё больше проблем. А при накоплении такого кода в ПО, проще будет всю программу переписать заново, чем добавлять функциональность в это... кхм.
0
Заблокирован
13.12.2017, 16:55
Цитата Сообщение от Rius Посмотреть сообщение
ТС так и не сказал, нафига ему это надо.
ТС хочет обмануть то ли заказчика (типа процесс идёт...), то ли самого себя этими псевдостатуссообщениями.
Как поменять текст в Label по истечению времени?
0
3 / 3 / 0
Регистрация: 10.12.2017
Сообщений: 17
13.12.2017, 17:15  [ТС]
Спасибо.

Добавлено через 5 минут
Это нужно для курсовой. Тема: "Кассовый аппарат со всеми вытекающими, как остаток на складе, оплата двумя способами (наличка и карта), печать чеков и прочее"
0
Эксперт .NET
 Аватар для Usaga
14126 / 9346 / 1350
Регистрация: 21.01.2016
Сообщений: 35,111
13.12.2017, 17:49
Цитата Сообщение от Sinjour Посмотреть сообщение
Это нужно для курсовой.
Если вы со Thread.Sleep в коде сможете защитить свою курсовую, то я вообще не знаю, что думать про этот ВУЗ...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.12.2017, 17:49
Помогаю со студенческими работами здесь

Как остановить thread.Sleep по клику
дело такое - опрашиваю ком порты. есть функция и класс, отвечающие за разные методы. приходится ставить thread.sleep() чтобы получить...

System.Threading.Thread.Sleep запускается не там, где прописан
Здравствуйте! У меня есть форма, на ней различные "label", из которых состоит уровень, а есть "label" во всю программу, на...

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

Thread.Sleep в главном потоке или как сделать нормальную задержку
Здравствуйте, мне нужно сделать задержку, хотелось бы через Thread.Sleep, но использование его в UI-потоке, как известно, приводит к...

Как избежать блокировки основного UI потока при вызове Thread.Sleep в вспомогательном потоке?
Добрый день! Создаю событие для создаваемой кнопки следующим образом: btnStartTool.Click += (sender1, e1) => ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru