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

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

Dottik

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

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

Dottik

#4
Возможно ты поневнимательности написал Thread.Sleep(30000) вместо Thread.Sleep(30000) :angry:
Если нет, то кинь фрагменты кода, либо опеши подробней, что и как...
 
P
#5
[/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

#6
Тогда все ясно, просто про цикл я ничего не знал.
Удачи!
 
L
#7
необходимо осуществить вывод изображения на форме а через 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

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

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

TWin

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


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

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