Trigger Backgroundworker Завершенное событие - PullRequest
1 голос
/ 17 июня 2010

Я пытаюсь отобразить индикатор выполнения (marque) в отдельной форме (progressForm), пока я делаю некоторые вычисления в фоновом режиме.

Я знаю, что типичный способ сделать это - включить вычисления в фоновом режиме и показать progressForm в основном потоке. Однако этот подход приведет к большому количеству проблем с синхронизацией в моем приложении, поэтому я показываю progressForm, используя progressForm.ShowDialog() внутри фонового рабочего процесса. Но мне нужно вызвать событие Completed в приложении, чтобы закрыть форму.

Возможно ли это?

Заранее спасибо.

1 Ответ

1 голос
/ 18 июня 2010

Как только прогресс вашего фонового работника достигает 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...