BeginInvoke
не имеет ничего общего с рисованием и не имеет никакого отношения к реализации задержки. Это все о многопоточном доступе, который вы здесь не делаете. Это не правильное решение.
И нет ничего плохого в том, чтобы звонить Invalidate
. Это просто помечает область как требующую покраски. На самом деле это не приводит к перекрашиванию этой области несколько раз. Если область, которую вы объявили недействительной, уже была признана недействительной, то это запрет, поэтому здесь не нужно ничего замедлять. Если вы хотите, чтобы он был перекрашен немедленно , вам нужно будет вызвать что-то вроде Refresh
.
Одна вещь, которую вы могли бы сделать, - предотвратить родительский элемент управления от попытки изменить его размер и изменить расположение дочерних элементов управления, чтобы приспособить новую позицию StatusStrip
. Для этого вызовите метод SuspendLayout
, когда вы начнете изменять размер, и метод ResumeLayout
, когда вы закончите.
Конечно, это не гарантирует решения вашей проблемы. Вы по-прежнему очень вероятно, что увидите лаги, а в областях, которые еще не были окрашены, появляются белые или черные области. Это происходит в других приложениях и даже при изменении размеров окон. Единственное решение этой проблемы - двойная буферизация, отрисовка всего во временный фоновый буфер и затем отрисовка всего законченного изображения на экран.