У меня есть элемент управления Windows Forms (подкласс Panel
), который служит панелью для отображения изображения. Фон элемента управления служит изображением, которое отображается пользователю.
Само изображение обычно представляет собой скриншот того, что находится за приложением. Метод получения этого снимка экрана состоит в том, чтобы скрыть приложение и заставить пользователя нажать кнопку.
Когда эта кнопка нажата, снимок экрана сохраняется в качестве фона элемента управления Windows Forms, а затем приложение отображается снова. Фон не обновляется
пока элемент управления снова не станет видимым, и это вызывает заметное мерцание, когда старый фон переключается на новый. Есть ли способ заставить фон
изменить, пока элемент управления скрыт и убрать это мерцание?
Код:
public void updateBackground()
{
Image bg = null;
do
{
// this just gets the background using gdi32 and user32 calls
bg = Utilities.getDesktopImage();
}
while (bg == null);
// this function invokes the GUI thread to change the BackgroundImage of the
// drawPanel
drawPanel.setBackground(bg)
// drawPanel is a child control to the main Form
mainForm.show();
}
Я также пытался использовать различные формы Refresh()
и Invalidate()
, чтобы получить элемент управления для обновления до его отображения. Application.DoEvents()
кажется для улучшения скорости, но все еще есть заметное изменение от старого фона к новому.
Есть ли что-то, чего мне не хватает? Кажется, я не могу найти то, что ищу, в Google или где-либо еще в StackOverflow.
Спасибо.