我正在使用此代码
For Each item In ListBox1.Items
ListBox2.Items.Add(item + ":" + item)
我怎么能放慢速度,这样我的程序就不会冻结。
简单的答案是使用 DoEvents() 这告诉您的 UI 线程查看是否还有其他消息需要处理,例如您的 UI 更改。警告,这将允许用户单击您的按钮,关闭您的表单等。您需要锁定一些东西,以便用户无法在运行时单击两次按钮或关闭表单。此外,我通常避免在每个循环中运行 DoEvents。这取决于您的情况以及您在循环中的内容,但每 100 个应该在您发布的示例中起作用。
Dim iLoop as int32 = 0
For Each item In ListBox1.Items
ListBox2.Items.Add(item + ":" + item)
iLoop += 1
If i mod 100 = 0 then 'Only runs 1 out of 100 times
system.windows.forms.application.doevents()
end if
next
BeginUpdate()
在循环之前和之后调用EndUpdate()
,以便列表框只更新一次。
Private Delegate Sub dlgUpdateUI(ByVal text As String)
Private t As Threading.Thread = New Threading.Thread(AddressOf updateListbox)
Private Sub updateListbox()
For Each item In ListBox1.Items
If ListBox2.InvokeRequired Then
Dim d As New dlgUpdateUI(AddressOf updateListbox)
ListBox2.Invoke(d, Text)
Else
ListBox2.Items.Add(item & ":" & item)
End If
Next
t.Start()
http://msdn.microsoft.com/en-us/library/aa645740%28v=vs.71%29.aspx