У меня есть библиотека из нескольких «настраиваемых элементов управления». По сути, у нас есть собственные кнопки, панели с закругленными углами и несколько групповых ящиков с нестандартной окраской. Несмотря на «математику» в методах OnPaint, элементы управления довольно стандартные. В большинстве случаев все, что мы делаем, это рисуем закругленные углы и добавляем градиент к фону. Для этого мы используем GDI +.
Эти элементы управления в порядке (и, по мнению наших клиентов, выглядят очень красиво), однако, несмотря на DoubleBuffer, вы можете увидеть некоторую перерисовку, особенно когда на одной форме есть 20 ++ кнопок (например). При загрузке формы вы видите рисование кнопок… что раздражает.
Я почти уверен, что наши кнопки не самые быстрые в мире, но мой вопрос: если двойной буфер включен, не должна ли вся эта перерисовка происходить в фоновом режиме, а подсистема Windows должна показывать результаты «мгновенно»?
С другой стороны, если есть «сложный» цикл foreach, который будет создавать метки, добавлять их на панель (с двойной буферизацией) и изменять их свойства, если мы приостанавливаем размещение панели перед циклом и возобновляем макет панели, когда цикл В конце концов, не должны ли все эти элементы управления (метки и кнопки) появляться «почти мгновенно»? Так не бывает, видно, что панель заполняется.
Есть идеи, почему этого не происходит? Я знаю, что это сложно оценить без образца кода, но это тоже сложно воспроизвести. Я мог бы снять видео на камеру, но поверьте мне, это не быстро :)