Я создал форму в С# (VS2010), которая содержит (среди прочего) элемент управления текстовым полем. Текстовое поле может содержать большое количество данных в некоторой точке (~ 3 миллиона символов).
При прокрутке или перемещении формы вокруг проблем не возникает, но когда форма сведена к минимуму и восстанавливается снова, запускается последовательность перерисовки (я считаю), которая вызывает большую задержку в 5-10 секунд для формы перекрасить.
Я уже пробовал несколько решений:
-
Использование двойного буфера - в соответствии с тем, что я прочитал, двойная буферизация применяется только к самой форме, а не к ее элементам управления
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.UserPaint, true);
-
Отключение разворачивания текстового поля после его минимизации с помощью:
SendMessage(this.my_textBox.Handle, WM_SETREDRAW, false, 0);
и возврат назад после восстановления формы. Я заметил, что отставание формы repaint существует и в том случае, если я не повторно активировал перерисовку текстового поля. -
Ручной двойной буфер с использованием растрового изображения - аналогичные результаты, как # 1.
Я где-то читал, что эта проблема может быть связана с элементом управления текстовым полем, пытающимся сжимать или корректировать объем данных, но не может его переопределить.
Ранее у меня был тот же проект в MFC, но он не встречал никаких проблем с перерисовкой или отставанием.
Пожалуйста, сообщите мне, как решить эту проблему.