Vb.net 每1秒更新一次DataGridView

Vb.net 每1秒更新一次DataGridView,vb.net,datagridview,refresh,fill,Vb.net,Datagridview,Refresh,Fill,我试图每1秒更新一次DataGridView。 我使用了计时器,但我看到表单的用户界面变得非常慢。 我使用了BackgroundWorker,但在DataGridView中没有获得任何数据 以下是DataGridView代码: Private Sub OrderBookOffersForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load BackgroundWorker1.RunWorkerAsync() End Su

我试图每1秒更新一次DataGridView。 我使用了计时器,但我看到表单的用户界面变得非常慢。 我使用了BackgroundWorker,但在DataGridView中没有获得任何数据

以下是DataGridView代码:

Private Sub OrderBookOffersForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    BackgroundWorker1.RunWorkerAsync()
End Sub

Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
    Me.OrderBookOfferBidsTableAdapter.Fill(Me.BinanceDataSet.OrderBookOfferBids)
    Me.OrderBookOfferAsksTableAdapter.Fill(Me.BinanceDataSet.OrderBookOfferAsks)
End Sub

Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
    BackgroundWorker1.RunWorkerAsync()
End Sub
以下是计时器代码:

Me.OrderBookOfferBidsTableAdapter.Fill(Me.BinanceDataSet.OrderBookOfferBids)
Me.OrderBookOfferAsksTableAdapter.Fill(Me.BinanceDataSet.OrderBookOfferAsks)

您不能在
DoWork
事件处理程序中执行任何直接影响UI的操作。如果您填充了一个绑定到一个控件的
DataTable
,该控件预期会因此更新,那么显然您直接影响了UI,因此这是不允许的。最初的问题是您每次都会获取所有数据。我猜在大多数情况下,从一秒到下一秒都没有什么变化,所以一遍又一遍地获取相同的数据有什么意义呢?正确的选择是在表中有一列表示上次更新的时间,然后在每次更新时,只需检索值晚于最新值的数据即可。这样,您的大多数查询将不会获得任何数据,因此无需更改,也无需减慢UI速度。当有新数据时,它将只是一小部分。感谢您的重播,我尝试加载金融图书订单,其数据更改时间低于1秒,我从另一个表单更新了数据库中的allready,但是我需要这个表单来更新我数据库中的date live
update allready,它来自另一个表单
另一个表单或另一个应用程序?你得到的好建议仍然适用谢谢你的重播,现在我从另一个表单更新数据库,但最后的工作将是从另一台计算机或服务,我可以从另一个页面临时解决,但我需要解决方案,因为我只有最近更新的数据库。