Vb.net 线程通过Backgroundworker冻结加载数据

Vb.net 线程通过Backgroundworker冻结加载数据,vb.net,datagridview,datatable,progress-bar,backgroundworker,Vb.net,Datagridview,Datatable,Progress Bar,Backgroundworker,下面的代码似乎在执行时冻结了我的线程,这违背了我想要添加的进度的目的。我需要调整什么来消除这个问题吗?我的假设是,它与我加载的数据中字段的剪切量有关,在这个特定示例中,它远远超过150个字段(标题行和1个数据行) Private Sub BackgroundWorker1\u DoWork(发送方作为对象,e作为ComponentModel.DoWorkEventArgs)处理BackgroundWorker1.DoWork Dim file As String=“” Dim path As S

下面的代码似乎在执行时冻结了我的线程,这违背了我想要添加的进度的目的。我需要调整什么来消除这个问题吗?我的假设是,它与我加载的数据中字段的剪切量有关,在这个特定示例中,它远远超过150个字段(标题行和1个数据行)

Private Sub BackgroundWorker1\u DoWork(发送方作为对象,e作为ComponentModel.DoWorkEventArgs)处理BackgroundWorker1.DoWork
Dim file As String=“”
Dim path As String=“”
Dim ConStr=“Provider=Microsoft.ACE.OLEDB.12.0;数据源=”;扩展属性=”
Dim SQL=“选择*自”&路径和文件
tbl=新数据表
'使用将关闭并处置资源
使用cn作为新的OLEDB连接(ConStr),
cmd作为新的OleDbCommand(SQL,cn)
cn.Open()
使用da作为新的OleDbDataAdapter(cmd)
da.填充(待定)
终端使用
使用“关闭并处置”结束
'查找此会话的序列列
对于n=0到tbl.Columns.Count-1
如果tbl.Columns(n).ColumnName.ToLowerInvariant=“序列”,则
SeqColIndex=n
退出
如果结束
下一个
端接头

另外,与本地文件相比,通过网络加载数据可能会出现问题。很抱歉,无法复制。250ms打开连接并填写表格;1500ms迭代200列并打印名称以输出。(250毫秒,不打印)。将代码移动到一个按钮上,点击并逐步浏览它,看看它花了多长时间-5秒是疯狂的,但150个字段并不多。还要设置一个断点,并确保它没有被多次调用。(因为这基本上是我的代码,所以我和你使用的是相同的)有没有任何地方可以看到每一步需要多长时间?使用秒表查看
.appeased.TotalMillimes
注意,如果你遇到一个超过255列的文件,整个过程都会失败。显然,它将从平面文件中读取最多255个字段。我在测试文件中遗漏了一个换行符,因此数据列被附加到了头cols中——它在255处停止读取
    Private Sub BackgroundWorker1_DoWork(sender As Object, e As ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork

    Dim file As String = "<<file>>"
    Dim path As String = "<<path>>"

    Dim ConStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='<<source>>';Extended Properties='text';"
    Dim SQL = "SELECT * FROM  " & path & file

    tbl = New DataTable

    ' USING will close and dispose of resources
    Using cn As New OleDbConnection(ConStr),
        cmd As New OleDbCommand(SQL, cn)

        cn.Open()
        Using da As New OleDbDataAdapter(cmd)
            da.Fill(tbl)
        End Using

    End Using   ' close and dispose

    ' FIND the sequence column for this session
    For n = 0 To tbl.Columns.Count - 1
        If tbl.Columns(n).ColumnName.ToLowerInvariant = "sequence" Then
            SeqColIndex = n
            Exit For
        End If
    Next

End Sub