简单的代码:
Delegate Sub xxoo(tb As DataSet)
sub button1_click()
tread()
end sub
Private Sub tread()
Dim thread2 = New System.Threading.Thread(AddressOf Csql)
thread2.IsBackground = True
thread2.Start()
End Sub
Private Sub Csql()
连接数据库
Me.BeginInvoke(New xxoo(AddressOf slt), ds)
End Sub
Private Sub slt(ds0 As DataSet)
for i = 0 to 10000
‘--位置1
next
end sub
以上代码仍然卡住。鼠标对界面无反应。必须在位置1处用 Application.DoEvents() 才可以。
那岂不是白白用了多线程?
请问我不加入 Application.DoEvents()的话,以上语句怎么修改,才可以使界面不假死呢?
------解决思路----------------------
BeginInvoke的代码相当于单线程,还在UI执行。
你必须将导致悬挂的代码放在工作线程执行
------解决思路----------------------
界面控件通常不能用多线程处理的。
应该从分页、减少单次操作的数据量上着手。