Vb.net winforms:加载表单时性能低下
我有一个VB.NET winforms应用程序。它的一个表单包含一个flowlayoutpanel,我在表单加载事件中用成对的label textbox动态(以编程方式)填充它。My flowlayoutpanel是在设计时创建的,除以下属性外,所有属性都设置为默认值:Vb.net winforms:加载表单时性能低下,vb.net,forms,winforms,flowlayoutpanel,form-load,Vb.net,Forms,Winforms,Flowlayoutpanel,Form Load,我有一个VB.NET winforms应用程序。它的一个表单包含一个flowlayoutpanel,我在表单加载事件中用成对的label textbox动态(以编程方式)填充它。My flowlayoutpanel是在设计时创建的,除以下属性外,所有属性都设置为默认值: 自动调整大小:true 自动滚动:对 码头:填充 流向:自上而下 然后,我在form load事件中使用以下代码填充它: Private Sub MyForm_Load(ByVal sender As Object, ByV
- 自动调整大小:true
- 自动滚动:对
- 码头:填充
- 流向:自上而下
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
Private Sub MyForm_Load(ByVal sender作为对象,ByVal e作为System.EventArgs)
处理我的事,装货
作为标签的Dim lbl
将文本框设置为文本框
将flowLayout调整为FlowLayoutPanel
Dim g作为图形
对于i,作为整数=0到253
lbl=新标签
lbl.Text=i.ToString(“000”)+“:”
lbl.Anchor=锚点类型。无
lbl.AutoSize=True
txt=新文本框
txt.Text=“”
txt.MaxLength=5
txt.Anchor=AnchorStyles.None
txt.ReadOnly=True
g=txt.CreateGraphics
txt.Width=g.MeasureString(txt.Text,txt.Font)。宽度+5
g、 处置
flowLayout=新建FlowLayoutPanel
flowLayout.FlowDirection=FlowDirection.LeftToRight
flowLayout.AutoSize=True
flowLayout.Anchor=锚点样式。无
flowLayout.Margin=新填充(0)
flowLayout.Padding=新的填充(0)
flowLayout.Controls.Add(lbl)
flowLayout.Controls.Add(txt)
Me.FlowLayoutPnl.Controls.Add(flowLayout)
下一个
端接头
如上所述,FlowLayoutPnl是在设计时创建的,其上的组件是按照自上而下的流动方向添加的
上面的代码生成了这个
这里的问题是,在打开此表单时,需要花费大量时间(几秒钟)才能打开,因为它正在执行表单加载事件中的所有操作。打开它需要35秒!。当所有的东西都完成后,形态在35秒后变得可见
所以我想知道是否有某种方法可以加速表单加载。我在这里读过一些帖子,其中提到了在加载时实现和显示某种启动屏幕,指示用户正在加载,甚至执行异步加载。从form load事件创建一个后台线程来完成这项工作怎么样?谁能给我指引正确的方向?请举一个很小的例子。这类问题通常是如何解决的?SuspendLayout/ResumeLayout可能会有所帮助?创建和处理图形对象可能会花费很多时间。尝试删除该部分,并为所有
txt
元素指定一个固定宽度作为测试。让我们知道在那之后它的运行速度有多快。一个有762个控件的窗体将永远是一只狗。绘画将是非常糟糕的。然而,试图在这段代码中找到大约1000亿条cpu指令将是非常困难的。不要创建狗。@Arvo将SuspendLayout放在表单加载事件的开头,将ResumeLayout放在末尾是不起作用的。当然,您可以选择。绘制事件处理程序可以在几毫秒内完成。使用ListView或DataGridView可以轻松处理网格布局。你只是选择了最糟糕的选择。