Мне нужно обновить элементы управления в форме, потому что я использую this.Refresh()
, но форма мерцает. Как я могу плавно обновлять элементы управления?
Использование Application.DoEvents()
делает это плавно, но полезно ли это обновить, используя Application.DoEvents()
?
Здесь ссылка на MSDN о снижении мерцания в приложениях WinForms:
http://msdn.microsoft.com/en-us/library/3t7htc9c(VS.80).aspx
Самый простой способ - установить для свойства DoubleBuffered для формы значение true.
Form.ActiveForm.Update();
Если форма мерцает, это означает, что она уже получает много обновлений, которые заставляют ее перерисовывать.
Вам следует профайл, если это возможно, чтобы увидеть, что вызывает все обновления, и попытаться вырезать их, поскольку явно будут дубликаты.
Если возможно, смените фоновые операции на поток async, но не забудьте вернуться к потоку пользовательского интерфейса для любых обновлений фактических элементов управления.
Как правило, лучше избегать перекачки контура сообщения (т.е. вызывать Application.DoEvents()), потому что он может просто вызвать чрезмерную окраску и более мерцание не менее. Помните, что он принудительно обрабатывает ВСЕ события, а не только рисует.