2014-10-09 4 views
0

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

for(int i=1;i<=7;i++) 
{ 
    if (i == 1) { pictureBox1.Image = Properties.Resources.unu; Console.Beep(); } 
    if (i == 2) { pictureBox1.Image = Properties.Resources.doi; Console.Beep(); } 
    if (i == 3) { pictureBox1.Image = Properties.Resources.trei; Console.Beep(); } 
    if (i == 4) { pictureBox1.Image = Properties.Resources.patru; Console.Beep(); } 
    if (i == 5) { pictureBox1.Image = Properties.Resources.cinci; Console.Beep(); } 
    if (i == 6) { pictureBox1.Image = Properties.Resources.sase; Console.Beep(); } 
    Thread.Sleep(100); 
} 

Примечание: Я вставил Console.Beep просто чтобы увидеть, если программа входит в if с.

Я слышу звуковые сигналы, но изображение не меняется, оно остается по умолчанию. Зачем?

+3

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

ответ

1

Используя такой блокирующий вызов, ваша программа не может повторно вводить код пользовательского интерфейса и обновлять изображение до тех пор, пока оно не будет завершено, что означает, что он не изменится. Кроме того, в зависимости от того, что вы используете для пользовательского интерфейса (вам, вероятно, следует пометить вопрос с этим!), Вам может потребоваться позвонить picturebox1.Update() или .Refresh(), чтобы заставить элемент управления перерисовать.

Также обратите внимание, что поскольку операции могут быть очень быстрыми в зависимости от того, что вы делаете, вам нужно будет вставить Thread.Sleep(...) звонки или каким-то образом дождаться ввода пользователем между каждым изменением изображения или вы увидите размытие изображений в лучшем случае, и только самое последнее изображение появляется в худшем случае. Если вы используете фреймворк, который требует от вас позвонить .Update(), вам нужно будет сделать это и между свопами изображений.

+0

ЛЮБОВЬ! с picturebox1.Refresh работает. Спасибо и хорошо провели вечер! –

+0

Рад, что это помогло. Всегда помните, что большинство пользовательских интерфейсов хотят быть обновленными вручную и не забывайте переадресовывать ответ, который каким-то образом помог. – David

+0

. Я не могу выдвинуть или уменьшить число недостатков репутации, я вижу, что ваш ответ сбивается с места, что на самом деле означает, что это решение проще для меня, и мне не нужна моя программа, чтобы быть наиболее эффективной, просто чтобы заставить ее работать. Спасибо. –

3

Поскольку ваше приложение не обрабатывает события, пока вы не вышли из цикла. Используйте таймер.

+0

Я пробовал использовать таймер, но я не мог заставить его работать. Я довольно новичок в программировании. Я потратил несколько часов на то, как использовать этот таймер, но я потерпел неудачу. –

+3

@ Berindean, покажите нам, что вы «попробовали», и объясните, почему вы думаете, что «не смогли заставить его работать». –

Смежные вопросы