sql >> データベース >  >> RDS >> Sqlserver

大きなSQLCommandVB.Netの実行中にプログレスバーを表示する方法

    これは、VB.Net4.0でAsychrounousWorkを実行する方法の縮小例です。

    次のインポートがあるフォームがあると想像してみましょう。

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

    そのフォームには2つのコントロールがあります

    Private WithEvents DoSomthing As Button
    Private WithEvents Progress As ProgressBar
    

    アプリケーションのどこかに関数があります ExecuteSlowStuffと呼ばれます 、この関数は executeMyQueryと同等です 。重要な部分はアクションです 関数が進行中であることを示すために使用するパラメーター。

    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
    

    この作業は、 DoSomethingをクリックすることで開始されたとしましょう。 ボタン

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

    あなたはおそらくShowProgressがどこにあるのか疑問に思っているでしょう から来ています、それは厄介なビットです。

    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
    

    ShowProgress のため、注意してください 別のスレッドから呼び出すことができ、クロススレッド呼び出しをチェックします。その場合、メインスレッドで自分自身を呼び出します。



    1. カンマ区切りの文字列を分割->FUNCTIONdb.CHARINDEXが存在しません

    2. SSRS-式を使用したGroup_Concatと同等ですか?

    3. PDO-MySQL:プリペアドステートメントのバインド時にブール値が1または空の文字列に変換されます

    4. HTMLをMySQLデータベースに保存する