Двойная буферизация, когда не рисуется в OnPaint (): почему это не работает?

Я работаю над простым приложением векторного рисования в C # /. Net. Рисование выполняется на панели, но я не использую событие OnPaint () для всего этого - на самом деле OnPaint () даже просто вызывает другой метод, который фактически рисует все в документе.

Я попытался добавить двойную буферизацию, но когда я установил для DoubleBuffered значение true, проблема с мерцанием стала еще хуже. Почему это? Если я хочу удвоить буферизацию элемента управления, нужно ли мне делать все мои рисунки в событии OnPaint () с предоставленным объектом Graphics вместо использования Panel.CreateGraphics () и затем рисовать в этом?

РЕДАКТИРОВАТЬ: это основной код, который я использую.

private void doc_Paint(object sender, PaintEventArgs e)
{
    g = doc.CreateGraphics();
    Render(ScaleFactor, Offset);
}    

private void Render(float ScaleFactor, PointF offset)
{
    foreach (Line X in Document.Lines) { DrawLine(X.PointA, X.PointB, X.Color, X.LineWidth); }
}
private void DrawLine(PointF A, PointF B, Color Color, float Width)
{
    Pen p = new Pen(Color, Width);
    PointF PA = new PointF(((A.X + Offset.X) * ScaleFactor), ((A.Y + Offset.Y) * ScaleFactor));
    PointF PB = new PointF(((B.X + Offset.X) * ScaleFactor), ((B.Y + Offset.Y) * ScaleFactor));
    g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
    g.DrawLine(p, PA, PB);
}

Общая идея заключается в том, что две переменные, ScaleFactor и Offset, ссылаются на уровень масштабирования и уровень панорамирования в пользовательском интерфейсе. g является графическим объектом.

Ответы на вопрос(2)

Ваш ответ на вопрос