pb_elvisSherlock.Visible = true;
Application.DoEvents(); //let the app show the picturebox
Thread.Sleep(3000);
pb_elvisSherlock.Visible = false;
Проблема в том, что вы не даете циклу сообщений возможность отобразить графическое окно, прежде чем вы приостановите поток графического интерфейса. Application.DoEvents()
решите это.
Обратите внимание, что использование Thread.Sleep
в потоке графического интерфейса приведет к зависанию рисунка (попробуйте переместить окно поверх вашего приложения, когда Sleep
активен).
Вы должны сделать что-то вроде этого:
pb_elvisSherlock.Visible = true;
int counter = 0;
while (counter < 30)
{
Application.DoEvents();
Thread.Sleep(100);
++counter;
}
pb_elvisSherlock.Visible = false;
Это все еще своего рода хак, но окно будет перерисовано и ответит как следует.
Обновление 2
Хорошо. DoEvents
похоже, что-то вроде хака. (спасибо за комментарии).
Если картинка-бокс представляет собой нечто вроде придирчивого экрана, сделайте что-то вроде этого:
Альтернатива 1
- Создайте новую форму, содержащую только поле рисунка (не используйте границы для этой формы).
- Добавьте к этой форме таймер, который через три секунды вызывает
Close
- вызов 'myNagForm.DoModal ()'
Это решение препятствует тому, чтобы ваши пользователи делали что-либо в вашей "нормальной" форме, пока nagform видна.
Альтернатива 2
- Создание фонового работника, см. Здесь, например: http://dotnetperls.com/backgroundworker
- Переместите изображение и код, выполненный после него, в метод фонового рабочего.