1

バックグラウンドでいくつかの計算を行っている間、進行状況バー (マーク) を別のフォーム (progressForm) に表示しようとしています。

バックグラウンドワーカーに計算を含め、メインスレッドでprogressFormを表示するのが典型的な方法であることを私は知っています。progressForm.ShowDialog()このアプローチは、アプリケーションで多くの同期の問題を引き起こすため、バックグラウンド ワーカー プロセス内で使用する progressForm を示しています。ただし、フォームを閉じるには、アプリケーションで Completed イベントをトリガーする必要があります。

これは可能ですか?

前もって感謝します。

4

1 に答える 1

1

バックグラウンド ワーカーの進行状況が 100% に達すると、バックグラウンド ワーカーの RunWorkerCompleted イベントが発生します。

編集- コードサンプルを追加

    Dim WithEvents bgWorker As New BackgroundWorker With { _
    .WorkerReportsProgress = True, _
    .WorkerSupportsCancellation = True}

    Private Sub bgWorker_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bgWorker.DoWork
        For i As Integer = 0 To 100
            'Threw in the thread.sleep to illustrate what's going on.  Otherwise, it happens too fast.
            Threading.Thread.Sleep(250)
            bgWorker.ReportProgress(i)
        Next
    End Sub

    Private Sub bgWorker_ProgressChanged(ByVal sender As System.Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bgWorker.ProgressChanged
        If e.ProgressPercentage Mod 10 = 0 Then
            MsgBox(e.ProgressPercentage.ToString)
        End If
    End Sub

    Private Sub bgWorker_RunWorkerCompleted(ByVal sender As System.Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bgWorker.RunWorkerCompleted
        MsgBox("Done")
    End Sub
于 2010-06-18T16:30:23.880 に答える