Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment afficher la barre de progression lors de l'exécution de gros SQLCommand VB.Net

Voici un exemple réduit de la façon de faire un travail asynchrone avec VB.Net 4.0.

Imaginons que vous ayez un formulaire contenant les importations suivantes,

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

Ce formulaire a deux contrôles

Private WithEvents DoSomthing As Button
Private WithEvents Progress As ProgressBar

Quelque part dans votre application, nous avons une Function appelé ExecuteSlowStuff , cette fonction est l'équivalent de votre executeMyQuery . La partie importante est l'Action paramètre que la fonction utilise pour montrer qu'elle progresse.

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

Disons que ce travail est commencé par le clic du DoSomething Button .

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

Vous vous demandez probablement où ShowProgress vient, c'est la partie la plus compliquée.

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

Notez que parce que ShowProgress peut être appelé à partir d'un autre thread, il vérifie les appels inter-thread. Dans ce cas, il s'invoque sur le thread principal.