visualbasicのbackgroundworkerを使って8バイト16アドレスのステータスを1秒ごとに取得してDataGridViewに表示させるプログラムを出して

Imports System.ComponentModel
Imports System.Threading
Imports System.Windows.Forms
Public Class Form1
    Private worker As New BackgroundWorker()
    Private dataTable As New DataTable()

    Public Sub New()
        InitializeComponent()

        ' BackgroundWorkerの設定
        worker.WorkerReportsProgress = True
        worker.WorkerSupportsCancellation = True

        ' DoWorkイベントハンドラを設定
        AddHandler worker.DoWork, AddressOf Worker_DoWork

        ' ProgressChangedイベントハンドラを設定
        AddHandler worker.ProgressChanged, AddressOf Worker_ProgressChanged

        ' RunWorkerCompletedイベントハンドラを設定
        AddHandler worker.RunWorkerCompleted, AddressOf Worker_RunWorkerCompleted

        ' DataTableに列を追加
        dataTable.Columns.Add("Address")
        dataTable.Columns.Add("Status")
    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ' フォームがロードされたときにBackgroundWorkerを開始
        If Not worker.IsBusy Then
            worker.RunWorkerAsync()
        End If

        ' DataGridViewにDataTableをバインド
        DataGridView1.DataSource = dataTable
    End Sub

    Private Sub Worker_DoWork(sender As Object, e As DoWorkEventArgs)
        Dim cancellationToken As CancellationToken = CType(e.Argument, CancellationToken)

        While Not cancellationToken.IsCancellationRequested
            ' ステータスを取得するコードをここに追加
            ' この例ではランダムなステータスを生成して表示します
            Dim address As String = GenerateRandomAddress()
            Dim status As String = GenerateRandomStatus()

            ' ステータスを報告してUIに表示
            worker.ReportProgress(0, {address, status})

            ' 1秒ごとにステータスを取得
            Thread.Sleep(1000)
        End While
    End Sub

    Private Sub Worker_ProgressChanged(sender As Object, e As ProgressChangedEventArgs)
        ' ステータスをDataTableに追加
        Dim data As String() = CType(e.UserState, String())
        dataTable.Rows.Add(data)
    End Sub

    Private Sub Worker_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs)
        ' バックグラウンドタスクが完了したときに実行する処理をここに追加
    End Sub

    Private Function GenerateRandomAddress() As String
        ' ダミーのランダムなアドレスを生成するコードをここに追加します
        ' 実際のアドレス生成ロジックに置き換えてください
        Dim random As New Random()
        Return $"Address {random.Next(1, 17)}"
    End Function

    Private Function GenerateRandomStatus() As String
        ' ダミーのランダムなステータスを生成するコードをここに追加します
        ' 実際のステータス取得ロジックに置き換えてください
        Dim random As New Random()
        Dim status As Integer = random.Next(0, 100)
        Return $"Status: {status}%"
    End Function
End Class