Создание подписанных файлов cookie для Amazon CloudFront

У меня была та же проблема. Я никогда не мог на 100% избавиться от мерцания (см. Пункт 2), но я использовал это

protected override void OnPaint(PaintEventArgs e) {}

, а также

this.DoubleBuffered = true;

. Основная проблема для мерцания убедитесь, что вы

  1. красите вещи в правильном порядке!
  2. убедитесь, что ваша функция рисования равна & lt; около 1/60 секунды

winforms вызывает метод OnPaint каждый раз, когда форму нужно перерисовать. Есть много способов, которыми это может быть девальвацией, в том числе перемещение курсора мыши над формой иногда может вызвать событие перерисовывания.

И важно отметить OnPaint, что вы не начинаете с нуля каждый раз, вы вместо этого начинаете с того места, где вы были, если вы заливаете цвет фона, вы, вероятно, будете мерцать.

Наконец, ваш объект gfx. Внутри OnPaint вам нужно будет воссоздать графический объект, но ТОЛЬКО, если размер экрана изменился. воссоздание объекта очень дорого, и его нужно утилизировать до его воссоздания (сбор мусора не на 100% обрабатывает его правильно или так говорит документация). Я создал переменную класса

protected Graphics gfx = null;

, а затем использовал ее локально в OnPaint, как это было, но это было потому, что мне нужно было использовать объект gfx в других местах моего класса. В противном случае НЕ ДЕЛАЙТЕ ЭТО. Если вы только рисуете в OnPaint, пожалуйста, используйте e.Graphics !!

// clean up old graphics object
gfx.Dispose();

// recreate graphics object (dont use e.Graphics, because we need to use it 
// in other functions)
gfx = this.CreateGraphics();

Надеюсь, что это поможет.

7
задан Community 23 May 2017 в 12:02
поделиться