Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak wyświetlić pasek postępu podczas wykonywania dużego SQLCommand VB.Net?

Oto skrócony przykład wykonywania pracy asynchronicznej z VB.Net 4.0.

Wyobraźmy sobie, że masz formularz, który ma następujące importy,

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

Ten formularz ma dwie kontrolki

Private WithEvents DoSomthing As Button
Private WithEvents Progress As ProgressBar

Gdzieś w Twojej aplikacji mamy Function o nazwie ExecuteSlowStuff , ta funkcja jest odpowiednikiem Twojego executeMyQuery . Ważną częścią jest Action parametr, którego funkcja używa, aby pokazać, że robi postępy.

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

Powiedzmy, że ta praca jest rozpoczynana przez kliknięcie DoSomething Button .

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

Prawdopodobnie zastanawiasz się, gdzie ShowProgress pochodzi z tego, co jest bardziej bałaganiarskie.

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

Zauważ, że ponieważ ShowProgress może być wywoływany z innego wątku, sprawdza wywołania między wątkami. W takim przypadku wywołuje się w głównym wątku.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy istnieje poważny spadek wydajności korzystania z kluczy obcych w programie SQL Server?

  2. Serwer Adaptive Server jest niedostępny lub nie występuje błąd podczas łączenia się z serwerem SQL z PHP

  3. Dlaczego zindeksowane widoki nie mogą mieć agregacji MAX()?

  4. Wiele instrukcji INSERT vs. pojedyncza INSERT z wieloma VALUES

  5. Jaki jest ciąg połączenia sql, którego muszę użyć, aby uzyskać dostęp do localhost\SQLEXPRESS z uwierzytelnianiem systemu Windows lub uwierzytelnianiem SQL?