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