Вам никогда не придется использовать CreateGraphics
.
Панель с двойной буферизацией должна исправить это.Не используйте его на своей «скрытой» панели.Возможно, вам следует избавиться от скрытой панели и просто использовать новую панель управления.Если у вас все еще возникают проблемы с мерцанием, то вам следует отредактировать свой вопрос и опубликовать код, который вызывает блокировку.
public class PanelEx : Panel
{
public PanelEx()
{
this.DoubleBuffered = true;
}
}
Если вы все еще хотите сделать свою собственную «скрытую» двойную буферизацию, тогда вы делаете этопрямо на вашем собственном растровом изображении:
Bitmap bm = new Bitmap(width, height);
Затем сделайте ваш рисунок следующим образом:
using (Graphics g = Graphics.FromImage(bm))
{
//Draw stuff
}
В вашем событии рисования Panels все, что вы делаете, это:
private void panel1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawImage(bm, 0, 0);
}
Когда вам нужно обновить экран, просто отключите панель:
panel1.Invalidate();
, которая скажет вашей программе вызвать событие рисования.