• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

задержка программы в C#

  • Автор темы PuH
  • Дата начала
Статус
Закрыто для дальнейших ответов.
P

PuH

необходимо осуществить вывод изображения на форме а через 3 секунды его скрытие после нажатия кнопки
пишу так:
private void button1_Click(object sender, System.EventArgs e)
{
pictureBox150.Visible = true;
Thread.Sleep(3000);
pictureBox150.Visible = false;
}
в результате получаю что программа сначала виснет на 3 секунды, а затем происходит вывод изображения и его мгновенное скрытие.
подскажите как решить проблемму
 
D

Dottik

Один из возможных вариантов решения:

Код:
private void button1_Click(object sender, System.EventArgs e)
{
pictureBox150.Visible = true;
Thread.Sleep(3000);
this.Refresh(); //обновить(перерисовать) форму и компоненты
pictureBox150.Visible = false;
}
 
P

PuH

Dottik
огромное спасибо, работает
только одна проблемма, сама форма запускается меньше секунды, а с приминением this.Refresh(); после соответствующего нажатия форма висит около минуты не расходуя системных ресурсов
 
D

Dottik

Возможно ты поневнимательности написал Thread.Sleep(30000) вместо Thread.Sleep(30000) :angry:
Если нет, то кинь фрагменты кода, либо опеши подробней, что и как...
 
P

PuH

[/b]Dottik
не вижу различий :angry:
если писать
private void button1_Click(object sender, System.EventArgs e)
{
pictureBox150.Visible = true;
Thread.Sleep(3000);
this.Refresh();
pictureBox150.Visible = false;
}
то программа спит 3 секунды, затем выводится картинка, далее она отображается 3 секунды и гаснет.

проблему уже решил перестановкой Thread.Sleep в цикл, вычисляющий переменные для программы с соответствующим изменением времени. т.к. она оказывается спала по 3 секунды каждый цикл, хотя в нем не находилась
а чтобы картинка отображалась сразу, а не после задержки переставил строку this.Refresh(); перед циклом, Thread.Sleep - внутри цикла, а pictureBox150.Visible = false; в самом конце вне цикла
 
D

Dottik

Тогда все ясно, просто про цикл я ничего не знал.
Удачи!
 
L

LAW

необходимо осуществить вывод изображения на форме а через 3 секунды его скрытие после нажатия кнопки
пишу так:
private void button1_Click(object sender, System.EventArgs e)
{
pictureBox150.Visible = true;
Thread.Sleep(3000);
pictureBox150.Visible = false;
}
в результате получаю что программа сначала виснет на 3 секунды, а затем происходит вывод изображения и его мгновенное скрытие.
подскажите как решить проблемму

Что бы изображение появилось вовремя необходимо между:
Код:
pictureBox150.Visible = true;
и
Код:
Thread.Sleep(3000);
вставить строку:
Код:
Application->ProcessMessages;

Удачи!
 
6

62316e

Для: LAW
Вроди Application->ProcessMessages; нет такого. Есть вроди Application.DoEvent(); если не ошыбаюсь - хотя это тоже не метод.

Не проще ли поставить на форму ещё один таймер?
 
T

TWin

Можно и в динамике таймер создать. Если на скорую руку, то получается вот так:


public Timer tmr1;

private void TimerOff(object sender, EventArgs e)
{
pictureBox1.Visible = false;
tmr1.Stop();
tmr1.Dispose();
}

private void button1_Click(object sender, EventArgs e)
{
pictureBox1.Visible = true;
tmr1 = new Timer();
tmr1.Interval = 3000;
tmr1.Tick += new System.EventHandler(TimerOff);
tmr1.Start();
}

Ничего не виснет, не тормозит, не задумывается.
А Sleep вообще старайтесь не использовать.
 
L

LAW

Для: LAW
Вроди Application->ProcessMessages; нет такого. Есть вроди Application.DoEvent(); если не ошыбаюсь - хотя это тоже не метод.

Не проще ли поставить на форму ещё один таймер?

Сорри. Это меня тут между C# и Билдером колбасит :)
Конечно Application.DoEvent();
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!