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