Vb.net 我可以为每个循环加速一个循环吗
这段代码看起来很简单,但运行起来需要很长时间。我做了一个只包含基本代码的示例项目,但仍然非常慢 我有一个带按钮和面板的表单。在运行时,面板会动态填充大约1700个自定义用户控件。自定义用户控件包含一个面板和一个属性。单击表单上的按钮会导致每个用户控件交换其颜色。这个动作应该一次完成,但速度太慢了,我可以看到每个用户控件一行一行地切换颜色 我是否可以暂停屏幕更新,直到每个循环的整个运行之后,而不是逐个更新每个面板 用户控制代码Vb.net 我可以为每个循环加速一个循环吗,vb.net,performance,for-loop,user-controls,Vb.net,Performance,For Loop,User Controls,这段代码看起来很简单,但运行起来需要很长时间。我做了一个只包含基本代码的示例项目,但仍然非常慢 我有一个带按钮和面板的表单。在运行时,面板会动态填充大约1700个自定义用户控件。自定义用户控件包含一个面板和一个属性。单击表单上的按钮会导致每个用户控件交换其颜色。这个动作应该一次完成,但速度太慢了,我可以看到每个用户控件一行一行地切换颜色 我是否可以暂停屏幕更新,直到每个循环的整个运行之后,而不是逐个更新每个面板 用户控制代码 Public Class ucBox Private _
Public Class ucBox
Private _TurnedOn As Boolean
Public Property TurnedOn() As Boolean
Get
Return _TurnedOn
End Get
Set(ByVal value As Boolean)
_TurnedOn = value
If TurnedOn Then
PnlBox.BackColor = Color.Red
Else
PnlBox.BackColor = Color.LightGray
End If
End Set
End Property
Private Sub PnlBox_Click(sender As Object, e As EventArgs) Handles PnlBox.Click
If TurnedOn Then
TurnedOn = False
Else
TurnedOn = True
End If
End Sub
End Class
表单代码
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
Dim Rw As Int16 = 0, Col As Int16 = 0, x As Int16
Dim Box As ucBox
With btnTest
.Text = "Test Me"
End With
While Rw < PnlMain.Height - 10
While Col < PnlMain.Width - 10
Box = New ucBox
x = x + 1
With Box
.Top = Rw
.Left = Col
.TurnedOn = False
.Name = "Box_" & x
Col += .Width + 4
End With
PnlMain.Controls.Add(Box)
Box = Nothing
End While
Col = 0
Rw += 24
If x > 2000 Then Exit While
End While
Debug.Print("There are " & x & " boxes.")
End Sub
Private Sub btnTest_Click(sender As Object, e As EventArgs) Handles btnTest.Click
Dim StartTime As Date = Now
For Each b As ucBox In PnlMain.Controls
If b.TurnedOn Then
b.TurnedOn = False
Else
b.TurnedOn = True
End If
Next
Debug.Print("Test took " & Now.Subtract(StartTime).TotalMilliseconds)
End Sub
End Class
公共类表单1
私有子表单1_Load(发送方作为对象,e作为事件参数)处理Me.Load
尺寸Rw为Int16=0,列为Int16=0,x为Int16
调暗框为ucBox
用btnTest
.Text=“测试我”
以
Rw2000,则在
结束时
Debug.Print(“有“&x&”框”)
端接头
私有子btnTest\u Click(发送者作为对象,e作为事件参数)处理btnTest。单击
Dim StartTime As Date=现在
对于PnlMain.控件中的每个b As ucBox
如果b.TurnedOn那么
b、 TurnedOn=错误
其他的
b、 TurnedOn=True
如果结束
下一个
Debug.Print(“测试已完成”&Now.Subtract(StartTime.total毫秒)
端接头
末级
我很欣赏你的任何想法。你的“ucBox”和控制面板“PnlBox”的尺寸是多少?显示1700个用户控件似乎有点太多了,但你看:。可能是我不知道vb的副本,但在c中,你可以使用并行循环@Video.baba,ucBox是15px 15px,PnlMain是1345px宽,577高。