Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So zeigen Sie den Fortschrittsbalken an, während Sie Big SQLCommand VB.Net ausführen

Hier ist ein reduziertes Beispiel für Asychrounous Work mit VB.Net 4.0.

Stellen wir uns vor, Sie haben ein Formular mit den folgenden Importen:

Imports System.Windows.Forms
Imports System.Threading
Imports System.Threading.Tasks

Dieses Formular hat zwei Steuerelemente

Private WithEvents DoSomthing As Button
Private WithEvents Progress As ProgressBar

Irgendwo in Ihrer Anwendung haben wir eine Function namens ExecuteSlowStuff , diese Funktion ist das Äquivalent zu Ihrer executeMyQuery . Der wichtige Teil ist die Action Parameter, mit dem die Funktion anzeigt, dass sie Fortschritte macht.

Private Shared Function ExecuteSlowStuff(ByVal progress As Action) As Integer
    Dim result = 0
    For i = 0 To 10000
        result += i
        Thread.Sleep(500)
        progress()
    Next

    Return result
End Function

Nehmen wir an, diese Arbeit wird durch den Klick auf DoSomething gestartet Button .

Private Sub Start() Handled DoSomething.Click
    Dim slowStuff = Task(Of Integer).Factory.StartNew(
        Function() ExceuteSlowStuff(AddressOf Me.ShowProgress))
End Sub

Sie fragen sich wahrscheinlich, wo ShowProgress kommt von, das ist der unordentlichere Teil.

Private Sub ShowProgress()
    If Me.Progress.InvokeRequired Then
        Dim cross As new Action(AddressOf Me.ShowProgress)
        Me.Invoke(cross)
    Else 
        If Me.Progress.Value = Me.Progress.Maximum Then
            Me.Progress.Value = Me.Progress.Minimum
        Else
            Me.Progress.Increment(1)
        End If

        Me.Progress.Refresh()
    End if
End Sub

Beachten Sie, dass ShowProgress von einem anderen Thread aufgerufen werden kann, prüft er auf Cross-Thread-Aufrufe. In diesem Fall ruft es sich selbst im Haupt-Thread auf.