• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

задержка программы в 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();
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

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