如何在线程状态上增加ProgressBar百分比?

时间:2016-01-14 17:47:37

标签: vb.net multithreading

我创建了一个软件,允许我在在线数据库上同步大量数据。现在我有一个名为Synchronization的表单,当用户打开此表单时,在Form Load event我执行一个名为SyncData的函数。此功能运行良好,但我想显示ProgressBar表单上Synchronization可用的百分比进度。我把这个函数称为:

Dim thread As New Thread(AddressOf SyncData)
thread.Start()

正如我所解释的,上面的代码位于Form Load Event。本质上,我的SyncData函数有一个循环,遍历本地数据库上可用的所有记录并执行insert / update / remove语句。我怎么能在类似的事情上取得成就?

1 个答案:

答案 0 :(得分:2)

这是一种方法。

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然后将progressbar的max设置为行数,并在每行完成后使用这一行:

invokeme(Sub()ProgressBar1.Increment(1))