sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo mostrar la barra de progreso al ejecutar SQLCommand grande VB.Net

Aquí hay un ejemplo reducido de cómo hacer trabajo asíncrono con VB.Net 4.0.

Imaginemos que tiene un formulario que tiene las siguientes importaciones,

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

Ese formulario tiene dos controles

Private WithEvents DoSomthing As Button
Private WithEvents Progress As ProgressBar

En algún lugar de su aplicación tenemos una Function llamado ExecuteSlowStuff , esta función es el equivalente de su executeMyQuery . La parte importante es la Action parámetro que la función usa para mostrar que está progresando.

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

Digamos que este trabajo se inicia con el clic de DoSomething Button .

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

Probablemente se esté preguntando dónde ShowProgress viene, esa es la parte más complicada.

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

Tenga en cuenta que debido a que ShowProgress se puede invocar desde otro subproceso, comprueba las llamadas entre subprocesos. En ese caso, se invoca a sí mismo en el hilo principal.