我创建了一个软件,可以让我同步在线数据库上的大量数据。现在我有一个名为 Synchronization
的表单,当用户打开此表单时,在Form Load event
中我执行一个名为 SyncData
的函数。这个函数运行良好,但我想显示Synchronization
表单上可用ProgressBar
进度的百分比。我像这样调用函数:
Dim thread As New Thread(AddressOf SyncData)
thread.Start()
正如我所解释的,上面的代码位于Form Load Event
中。本质上,我的SyncData
函数有一个循环,该循环遍历本地数据库上所有可用的记录并执行插入/更新/删除语句。我如何在类似的事情上实现?
这里有一种方法可以做到这一点。
Imports System.Threading
Public Class Form1
Dim syncThread As New Thread(AddressOf SyncData)
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
syncThread.IsBackground = True
syncThread.Start()
End Sub
Private Sub SyncData()
Dim dt As DataTable ' = your data you are using
invokeme(Sub() ProgressBar1.Maximum = dt.Rows.Count)
For Each row In dt.Rows
'do your syncing
invokeme(Sub() ProgressBar1.Increment(1))
Next
End Sub
Public Sub invokeme(ByVal iaction As Action)
If InvokeRequired Then
Invoke(iaction)
End If
End Sub
End Class
所以你只需要调用子,然后将进度条的最大值设置为行数,每行完成后使用以下行:
invokeme(Sub() ProgressBar1.Increment(1))