sql >> Databáze >  >> RDS >> Sqlserver

Jak zobrazit ukazatel průběhu při provádění velkého SQLCommand VB.Net

Zde je stručný příklad toho, jak provádět Asychrounous Work s VB.Net 4.0.

Představme si, že máte formulář, který má následující importy,

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

Tento formulář má dva ovládací prvky

Private WithEvents DoSomthing As Button
Private WithEvents Progress As ProgressBar

Někde ve vaší aplikaci máme Function s názvem ExecuteSlowStuff , tato funkce je ekvivalentem vašeho executeMyQuery . Důležitou součástí je Action parametr, kterým funkce ukazuje, že postupuje.

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

Řekněme, že tato práce začíná kliknutím na DoSomething Button .

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

Pravděpodobně se ptáte, kde ShowProgress pochází z, to je ten špinavější kousek.

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

Všimněte si, že protože ShowProgress lze vyvolat z jiného vlákna, kontroluje volání napříč vlákny. V tom případě se sám vyvolá v hlavním vláknu.



  1. Jak vytvořit funkci SQL Server pro spojení více řádků z poddotazu do jednoho odděleného pole?

  2. MySQL COUNT() ve více sloupcích

  3. Jaký je nejlepší způsob hromadného vkládání databáze z c#?

  4. Jak získat celkový počet výsledků, když je v dotazu LIMIT?