Я понимаю, что в интернете тонет множество вопросов об уменьшении мерцания в приложениях Windows Forms. После обильных экспериментов я обнаружил, что решение в моем конкретном случае было довольно простым: установив для свойства Control.DoubleBuffered
значение true для элементов управления, которые проявляли мерцание. Я достиг этого, просто получив необходимые классы управления (в моем случае от ListView
до DoubleBufferedListView
и от DataGridView
до DoubleBufferedDataGridView
).
Основным виновником приложения, над которым я работаю, является DataGridView
, который обновляет многие ячейки в событии Tick
объекта Windows.Forms.Timer
. Перед включением двойной буферизации сетка будет слегка мерцать (не так уж плохо, но достаточно, чтобы быть заметной) в большинстве обновлений. После включения двойной буферизации мерцание исчезло.
Однако я говорю о моей машине для разработки здесь. К сожалению, это приложение на самом деле запускается конечными пользователями через подключение к удаленному рабочему столу, которое я узнал из этого сообщения в блоге Рэймонда Чена означает, что я должен не использовать двойную буферизацию.
Тогда мой вопрос: что должен использовать? Чен предлагает переключиться между подходом с двойной буферизацией на локальных машинах и традиционным подходом с двойной буферизацией для подключений к удаленному рабочему столу; но в этом случае конечные пользователи этого приложения все еще будут испытывать мерцание. Это просто неизбежно?
Для справки: это , а не , простой вопрос вызова BeginUpdate
/ EndUpdate
(уже это делается на ListBox
и ListView
элементах управления) или SuspendLayout
/ ResumeLayout
(это уже делается для элемента управления DataGridView
, хотя я не думаю, что это даже особенно важно, поскольку, как я уже сказал, я просто обновляю значения в определенных ячейках).
Может быть, приложение без рабочего стола без мерцания просто невозможно?