Invalidate

procedure Invalidate -DESKTOP-

Запрашивает перерисовку визуального компонента.

1. Метод Invalidate добавляет прямоугольник компонента в регион обновления окна (своего и/или родительского) и более ничего не делает.

2. Увидев, что регион обновления окна не пустой, Windows пошлет ему сообщение WM_PAINT сразу же, как только опустеет его очередь сообщений и в итоге окно будет перерисовано.

Таким образом, Invalidate не перерисовывает компонент, а лишь ЗАПРАШИВАЕТ у системы его перерисовку. Фактически же перерисовка окна произойдет тогда, когда у него не будет другой, более важной работы. Причем, если Invalidate был вызван несколькими графическими (или прозрачными) компонентами, то перерисовка их родительского окна произойдет ОДИН раз - что позволяет избежать лишней работы и лишнего мерцания.

В отличие от Invalidate, метод Refresh приводит к НЕМЕДЛЕННОЙ перерисовке. То есть, в этом случае система не ждет, когда опустеет очередь сообщений окна, а посылает ему WM_PAINT сразу же.

Какой механизм лучше использовать - зависит от того, что в данный момент нужно сделать. Совет здесь может быть только один - если не хотите замедлить работу своей программы и увидеть на экране мерцания/моргания, то не злоупотребляйте немедленной перерисовкой, а используйте ее лишь тогда, когда она действительно нужна (то есть, когда требуется перерисовка, но программа в данном месте занята другим делом и Invalidate работает неудовлетворительно). На практике такое встречается довольно нечасто, поэтому пишите сначала Invalidate и проверяйте - если работает плохо, то лишь тогда есть смысл заменить на Refresh.