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

Тема в разделе ".NET", создана пользователем PuH, 10 дек 2006.

Наш партнер Genesis Hackspace
Статус темы:
Закрыта.
  1. PuH

    PuH Гость

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

    Dottik Гость

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

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

    PuH Гость

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

    Dottik Гость

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

    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; в самом конце вне цикла
     
  6. Dottik

    Dottik Гость

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

    LAW Гость

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

    62316e Гость

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

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

    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 вообще старайтесь не использовать.
     
  10. LAW

    LAW Гость

    Сорри. Это меня тут между C# и Билдером колбасит :)
    Конечно Application.DoEvent();
     
Загрузка...
Похожие Темы - задержка программы
  1. Gemini
    Ответов:
    10
    Просмотров:
    1.677
  2. deeeman
    Ответов:
    2
    Просмотров:
    1.193
  3. Oksy
    Ответов:
    1
    Просмотров:
    83
  4. gx6060
    Ответов:
    10
    Просмотров:
    1.084
  5. kionec
    Ответов:
    0
    Просмотров:
    193
Статус темы:
Закрыта.

Поделиться этой страницей