Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load '装置接続処理。 '接続が確立されるまで生存確認は行わないので、ここで時間がかかるのは問題ありません。 '(ゆえにBackgroundWorkerは使用していません) End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Try '生存確認 For i As Integer = 0 To (装置数) '装置がオープンされていない場合、確認ができない(する必要がない)ため飛ばす If isOpen(i) Then '※1 Continue For End If If i = 0 Then If (Not _bwLive1.IsBusy()) Then bwLive1.RunWorkerAsync() End If ElseIf i = 1 Then If (Not _bwLive2.IsBusy()) Then _bwLive2.RunWorkerAsync() End If End If (以下予定している装置数分だけ続きます。) Next '再接続(接続されていない場合は再接続を試みる) For i As Integer = 0 To (装置数) '装置がオープンされていれば問題ないので飛ばす If isOpen(i) Then '※1 Continue For End If If i = 0 Then If (Not _bwRetry1.IsBusy()) Then bwRetry1.RunWorkerAsync() End If ElseIf i = 1 Then If (Not _bwRetry2.IsBusy()) Then _bwRetry2.RunWorkerAsync() End If End If (以下予定している装置数分だけ続きます。) Next Catch 'エラー時処理 End Try End Sub '※2 Private Sub _bwLive1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles _bwLive1.DoWork '生存確認の処理 '(正常であることを示す値を装置へ書き込みにいく。などの処理) End Sub '※2 Private Sub _bwRetry1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles _bwRetry1.DoWork Try deviceReConnect(装置番号) '※3 isOpen(0) = True Catch ex As Exception isOpen(0) = False Throw End Try End Sub