sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man visar förloppsindikator medan man kör stora SQLCommand VB.Net

Här är ett nedskärningsexempel på hur man gör Asychrounous Work med VB.Net 4.0.

Låt oss föreställa dig att du har ett formulär som har följande importer,

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

Det formuläret har två kontroller

Private WithEvents DoSomthing As Button
Private WithEvents Progress As ProgressBar

Någonstans i din ansökan har vi en Function kallas ExecuteSlowStuff , den här funktionen motsvarar din executeMyQuery . Den viktiga delen är Action parameter som funktionen använder för att visa att den gör framsteg.

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

Låt säga att detta arbete startas genom att klicka på DoSomething Button .

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

Du undrar förmodligen var ShowProgress kommer från, det är det stökigaste.

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

Observera att eftersom ShowProgress kan anropas från en annan tråd, letar den efter anrop över trådar. I så fall åberopar den sig själv på huvudtråden.



  1. Infoga i... Sammanfoga... Välj (SQL-server)

  2. Använda Docker på Azure Container Service med Swarm Cluster

  3. Hur man skapar en primär nyckel i SQL Server (T-SQL-exempel)

  4. ORA-6502 med Grant Logging Trigger