Предполагается, что вы используете GDI, проблема с "миганием" экрана связана с записью непосредственно на первичную поверхность.Вы можете избежать этого, создав буфер "Bitmap", выполнив что-то вроде этого:
Bitmap buffer = New Bitmap(Me.ClientSize.Width, Me.ClientSize.Height)
Затем создайте управляемый объект "Graphics" из этого буфера,
Using gfx As Graphics = New Graphics.FromImage( buffer )
// draw with gfx object
End Using
Для отображенияобновленный обратный буфер на первичной поверхности, что-то вроде:
PrimaryGraphics.DrawImageUnscaled (buffer, 0, 0) или вы можете P / Invoke " BitBlt ", что я считаю немногобыстрее.
Если бы вы использовали C #, я бы предложил использовать «небезопасные» блоки кода для манипулирования буфером напрямую через указатели, что может значительно ускорить процесс.Тем не менее, я не верю, что VB.net их поддерживает.
Редактировать:
GDI + на самом деле не будет "молниеносно" быстрым, несмотря на то, как он реализован с использованием стандартной системыРесурсы CPU / Memory.
Вы можете использовать SlimDX , который имеет управляемую оболочку для Direct2D, аппаратно-ускоренного 2D API.Есть несколько учебных пособий , доступных для начала работы.
Edit 2:
Если вы придерживаетесь GDI, вы можете использовать "LockBits" в вашем заднем буфере, чтобы сделать некоторые "оптимизированные операции с памятью, здесь - отличная статья на эту тему.