Перерисовка управления ускорением

1

Я работаю над большим проектом. Моя форма представляет собой контейнер mdi формы 1. Form1 загрузка слишком медленная, и я вижу, что элементы управления отображаются.

У каждой формы есть метод обновления, но у меня все еще есть та же проблема. Я не могу использовать задачу для создания новой формы.

это мой код

       form1.MdiParent = Me
       form1.Show()

моя форма имеет более 40 элементов управления (текстовое поле, ярлык, gridview...) и да, это большой пользовательский интерфейс. Есть ли какое-либо решение использовать технологию совпадения, например: task, async ждут?

  • 2
    Очень сложно понять, о чем ты спрашиваешь. У вас есть конкретный вопрос, чтобы сделать его немного проще? В нынешнем виде вопрос кажется очень широким, и без каких-либо разъяснений он, вероятно, будет закрыт.
  • 0
    WinForms всегда был медленным при отображении формы с множеством элементов управления, есть несколько вещей, которые можно попробовать ускорить, вероятно, наиболее эффективный способ - это обработать сообщение WM_PAINT от WndProc, чтобы избежать перерисовок, а затем, когда все элементы управления готовы, вы разблокируете сообщение и обновите форму. Я не включаю это в качестве ответа, потому что я не предоставляю вам правильный код, поэтому я предпочитаю просто комментировать, потому что вам нужно будет проверить различные комбинации (например, двойную буферизацию и рендеринг вне экрана + подход WM_PAINT), чтобы найти правильный путь для вас
Показать ещё 2 комментария
Теги:

1 ответ

3
Лучший ответ

После запуска некоторых тестов и изучения старого кода я смог найти что-то, что помогает в этой конкретной проблеме, вы можете попробовать добавить следующий стиль к своей форме

public partial class Form1 : Form
{
    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams CP = base.CreateParams;
            CP.ExStyle = CP.ExStyle | 0x02000000; // WS_EX_COMPOSITED
            return CP;
        }
    }
}

Вы можете посмотреть документацию WS_EX_COMPOSITED здесь: http://msdn.microsoft.com/en-us/library/windows/desktop/ff700543(v=vs.85).aspx

Я попробовал это в форме с 752 дочерними элементами управления (ярлыки, текстовые поля, датаигры, списки со списками и списки), и я не вижу, как детальные элементы управления больше рисуются, они просто всплывают в представлении.

Версия VB:

Protected Overrides ReadOnly Property CreateParams() As CreateParams
 Get
     Dim cp As CreateParams = MyBase.CreateParams
        cp.ExStyle = cp.ExStyle Or &H02000000 
     Return cp
 End Get
End Property
  • 0
    Как я и сказал. Это не ускоряет процесс. Вы просто используете двойной буфер. Вопрос был в ускорении перерисовки управления
  • 0
    большое спасибо это решение моей проблемы

Ещё вопросы

Сообщество Overcoder
Наверх
Меню