Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como exibir a barra de progresso ao executar o grande SQLCommand VB.Net


Aqui está um exemplo reduzido de como fazer trabalho assíncrono com VB.Net 4.0.

Vamos imaginar que você tenha um formulário que tenha as seguintes importações,
Imports System.Windows.Forms
Imports System.Threading
Imports System.Threading.Tasks

Esse formulário tem dois controles
Private WithEvents DoSomthing As Button
Private WithEvents Progress As ProgressBar

Em algum lugar em seu aplicativo, temos uma Function chamado ExecuteSlowStuff , esta função é equivalente ao seu executeMyQuery . A parte importante é a Action parâmetro que a função usa para mostrar que está progredindo.
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 trabalho seja iniciado pelo clique do botão DoSomething Button .
Private Sub Start() Handled DoSomething.Click
    Dim slowStuff = Task(Of Integer).Factory.StartNew(
        Function() ExceuteSlowStuff(AddressOf Me.ShowProgress))
End Sub

Você provavelmente está se perguntando onde ShowProgress vem, essa é a parte mais confusa.
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

Observe que, como ShowProgress pode ser invocado de outro encadeamento, ele verifica as chamadas entre encadeamentos. Nesse caso, ele invoca a si mesmo no thread principal.