winforms: низкая производительность при загрузке формы

У меня есть приложение winforms VB.NET. Одна из его форм содержит поточную панель, которую я динамически (программно) заполняю при загрузке формы парами метка-текстовое поле. Моя Flowlayoutpanel создается во время разработки со всеми свойствами, установленными по умолчанию, кроме следующих:

  • Авторазмер: правда
  • Автопрокрутка: правда
  • Док: заполнить
  • FlowDirection: TopDown

Затем я заполняю его, используя приведенный ниже код в событии загрузки формы:

Private Sub MyForm_Load(ByVal sender As Object, ByVal e As System.EventArgs) 
Handles Me.Load
    Dim lbl As Label
    Dim txt As TextBox
    Dim flowLayout As FlowLayoutPanel
    Dim g As Graphics


For i As Integer = 0 To 253
    lbl = New Label
    lbl.Text = i.ToString("000") + ":"
    lbl.Anchor = AnchorStyles.None
    lbl.AutoSize = True

    txt = New TextBox
    txt.Text = "<" + i.ToString.PadLeft(3, " ") + ">"
    txt.MaxLength = 5
    txt.Anchor = AnchorStyles.None
    txt.ReadOnly = True
    g = txt.CreateGraphics
    txt.Width = g.MeasureString(txt.Text, txt.Font).Width + 5
    g.Dispose()

    flowLayout = New FlowLayoutPanel
    flowLayout.FlowDirection = FlowDirection.LeftToRight
    flowLayout.AutoSize = True
    flowLayout.Anchor = AnchorStyles.None
    flowLayout.Margin = New Padding(0)
    flowLayout.Padding = New Padding(0)

    flowLayout.Controls.Add(lbl)
    flowLayout.Controls.Add(txt)

    Me.FlowLayoutPnl.Controls.Add(flowLayout)
Next
End Sub

Как я уже говорил выше, FlowLayoutPnl создается во время разработки, и компоненты к нему добавляются в соответствии с направлением потока TopDown.

Выше код дает этот результат.

Проблема здесь в том, что при открытии этой формы требуется так много времени (несколько секунд), чтобы открыть, потому что он делает все вещи в событии загрузки формы. Это займет 35 секунд, чтобы открыть! Когда все готово, форма становится видимой через 35 секунд...

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

0 ответов

Другие вопросы по тегам