当前位置: 代码迷 >> VB Dotnet >> vb.net 多线程 依然卡
  详细解决方案

vb.net 多线程 依然卡

热度:423   发布时间:2016-04-25 02:04:05.0
vb.net 多线程 仍然卡
简单的代码:
 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执行。
你必须将导致悬挂的代码放在工作线程执行
------解决思路----------------------
MSDN:
DataGridView 类
线程安全
此类型的任何公共 static(在 Visual Basic中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

界面控件通常不能用多线程处理的。
应该从分页、减少单次操作的数据量上着手。
  相关解决方案