使用线程将数据从SQL Server加载到datagridview

使用线程将数据从SQL Server加载到datagridview,sql,vb.net,datagridview,Sql,Vb.net,Datagridview,我正在尝试使用带委托的线程将数据从SQL Server数据库加载到DataGridView中,稍后将尝试添加加载或等待表单。但我不能让它工作 Dim t1作为线程 私有委托子委托_updategV() 私有子mainform_Load(发送方作为对象,e作为事件参数)处理MyBase.Load t1=新线程(加载的地址) t1.Start() 端接头 专用函数加载_dgv() 尝试 如果DBCon.State=ConnectionState.Closed,则 DBCon.Open() 如果结束

我正在尝试使用带委托的线程将数据从SQL Server数据库加载到DataGridView中,稍后将尝试添加加载或等待表单。但我不能让它工作

Dim t1作为线程
私有委托子委托_updategV()
私有子mainform_Load(发送方作为对象,e作为事件参数)处理MyBase.Load
t1=新线程(加载的地址)
t1.Start()
端接头
专用函数加载_dgv()
尝试
如果DBCon.State=ConnectionState.Closed,则
DBCon.Open()
如果结束
DBCmd=新的SqlCommand(“从作业中选择*”,DBCon)
DBCmd.ExecuteNonQuery()
Dim DBDT=新数据表
Dim DBDA=新的SqlDataAdapter(DBCmd)
Dim记录计数=DBDA.Fill(DBDT)
分配(DBDT)
DBCon.Close()
特例
MsgBox(例如消息)
最后
如果DBCon.State=ConnectionState.Open,那么DBCon.Close()
结束尝试
端函数
子赋值(ByVal x作为数据表)
如果我需要的话
Me.Invoke(新的委托\u updategV(分配的地址))
如果结束
GridControl1.DataSource=x
端接头
而且根本不起作用

你的代表

Private Delegate Sub Delegate_updatedgv()
你的方法呢

子赋值(ByVal x作为数据表)
没有相同的签名。实际上编译器已经在错误消息中告诉您了

您可以使用
操作(数据表)
。不需要创建新的委托

您还需要仅在UI线程上调用时设置数据源。您可以通过使用
Else
来实现这一点

子赋值(ByVal x作为数据表)
如果我需要的话
调用(新操作(数据表)(分配地址))
其他的
GridControl1.DataSource=x
如果结束
端接头
或者,也可以正确声明委托。无论如何

Private Delegate Sub Delegate\u updatedgv(x作为数据表)
另外,方法/函数
私有函数load_dgv()
没有返回类型,并且不返回任何内容。所以它更适合作为潜艇

Private Sub load_dgv()
' ...
端接头
编译器还警告您这一点


请注意编译器错误消息

现在,让我们稍微修改一下数据库代码。当数据库对象保持在使用它们的方法的本地时,不需要检查连接状态。通过这种方式,您可以确保它们已关闭,并使用
Using…End Using
块进行处理

我不知道你为什么要用这个命令调用
.ExecuteNonQuery
。你从未使用过
RecordCount
,所以我也不明白这有什么意义。我只使用了一行来加载数据表。适配器似乎无关

Private Sub load_dgv()
    Dim dt As New DataTable
    Using DBCon As New SqlConnection("Your connection string"),
        DBCmd As New SqlCommand("SELECT * FROM Jobs ", DBCon)
        DBCon.Open()
        dt.Load(DBCmd.ExecuteReader)
    End Using
    assignit(dt)
End Sub
我知道这并没有回答您的线程问题,但我希望它对数据访问有所帮助


这段代码的瓶颈在哪里?它只是检索数据还是更新用户界面?可能只有数据访问需要在单独的线程上运行。

“而且根本不起作用”-这不是对问题的描述。添加详细信息、获取的错误以及更多信息…委托和方法签名不匹配
“我解决了问题,但需要添加一个等待表单,以便在数据完全加载之前显示”
。那么问题出在哪里呢?请编辑您的问题以清楚地说明它,否则这个问题没有价值。我用您的代码更改了sub assignit,它仍然说addressof不能转换为adelegate@christymallony然后
Me.Invoke(新操作(数据表的)(assignit的地址))
@christymallony很抱歉,我有一些扩展方法可以支持我最初的建议。我已将其更新为使用Action。我解决了问题,但需要添加一个等待表单,以便在数据完全加载之前显示。谢谢,我收到一个参数计数不匹配的错误,我想在加载数据时添加一个等待表单(加载)。这是一个有趣的错误,因为没有参数。代码错误出现在哪一行?我解决了这个问题,但需要添加一个等待表单,以便在数据完全加载之前显示