Первое, что нужно сделать, это добавить в форму компонент BackgroundWorker
. Щелкните компонент и настройте обработчики событий DoWork
, RunWorkerCompleted
и ProgressChanged
. Затем, если вы используете все имена по умолчанию, ваш код будет выглядеть так:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
backgroundWorker1.RunWorkerAsync()
End Sub
Private Sub backgroundWorker1_DoWork(sender As Object, e As DoWorkEventArgs) Handles backgroundWorker1.DoWork
Dim worker As BackgroundWorker = DirectCast(sender, BackgroundWorker)
Dim Table1 As New DataTable("EXAMPLETABLE")
Table1.Columns.Add("COLUMN1")
Table1.Columns.Add("COLUMN2")
Table1.Columns.Add("COLUMN3")
Dim Size As Integer = 1000000
For i As Integer = 1 To Size
Table1.Rows.Add(New String() {i.ToString(), "Test", "Test"})
If i Mod 50 = 0 Then
worker.ReportProgress(i * 100.0 / Size) 'Report as a percentage of the total
End If
Next
e.Result = Table1
End Sub
Private Sub backgroundWorker1_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs)
DataGridView1.DataSource = DirectCast(e.Result, DataTable)
End Sub
Private Sub backgroundWorker1_ProgressChanged(sender As Object, e As ProgressChangedEventArgs) Handles backgroundWorker1.ProgressChanged
'Check e.ProgressPercentage here
End Sub
Это базовый пример c. Вы также можете использовать это, чтобы делать такие вещи, как отчет о прогрессе и убедиться, что он еще не занят, прежде чем запускать его. Дополнительная информация (включая образцы в C#, но легко переводится на VB. Net) находится здесь:
https://docs.microsoft.com/en-us/dotnet/api/system.componentmodel.backgroundworker?view=netcore-3.1