1 Public Class MainForm 2 3 Dim t0 As System.Threading.Thread '监控 4 Dim t1 As System.Threading.Thread 'immediate 5 Dim t2 As System.Threading.Thread 'everyday 6 Dim t3 As System.Threading.Thread 'everyweek 7 8 Dim PermitNextTask As Boolean = True 9 Dim IsTaskRunning As Boolean = False 10 Dim FThreadsParameters As ThreadsParameters 11 12 '================================================================================================================================================== 13 14 Private Sub MainForm_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 15 FThreadsParameters = New ThreadsParameters() 16 CbBoxFreq.SelectedIndex = 0 17 End Sub 18 19 Private Sub StartBTN_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles StartBTN.Click 20 21 FThreadsParameters.AddLog(0, "Try Start Program. " & vbCrLf) 22 23 If IsTaskRunning Then 24 FThreadsParameters.AddLog(0, "Can't Start New Program,old task is still running") 25 Return 26 End If 27 28 IsTaskRunning = True 29 30 PermitNextTask = True 31 32 'Terminate current T0 thread 33 Try 34 If t0.ThreadState = Threading.ThreadState.Running Then 35 Try 36 t0.Abort() 37 Catch ex As Exception 38 FThreadsParameters.AddLog(0, "Error: " & ex.ToString) 39 End Try 40 t0.Join() 41 End If 42 Catch ex As Exception 43 End Try 44 45 'Start a new T0 thread 46 t0 = New System.Threading.Thread(New System.Threading.ThreadStart(AddressOf StartProgram)) 47 t0.IsBackground = True 48 t0.Start() 49 50 End Sub 51 52 Private Sub StopBTN_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles StopBTN.Click 53 'On Error Resume Next 54 PermitNextTask = False 55 56 FThreadsParameters.AddLog(0, "Try to Stop the program. ") 57 End Sub 58 59 Private Sub StartProgram() 60 61 If PermitNextTask Then 62 'FThreadsParameters.AddLog(0, "▲ PermitNextTask is true ▲: " & PermitNextTask) 63 'initial------------------------------------------------------------------------- 64 '[Start T1 Thread] 65 Dim FSubscribeSender1 As New SubscribeSender(FThreadsParameters) 66 t1 = New System.Threading.Thread(New System.Threading.ThreadStart(AddressOf FSubscribeSender1.Start1)) 67 t1.IsBackground = False 68 t1.Start() 69 '[Start T2 Thread] 70 Dim FSubscribeSender2 As New SubscribeSender(FThreadsParameters) 71 t2 = New System.Threading.Thread(New System.Threading.ThreadStart(AddressOf FSubscribeSender2.Start2)) 72 t2.IsBackground = False 73 t2.Start() 74 '[Start T3 Thread] 75 Dim FSubscribeSender3 As New SubscribeSender(FThreadsParameters) 76 t3 = New System.Threading.Thread(New System.Threading.ThreadStart(AddressOf FSubscribeSender3.Start3)) 77 t3.IsBackground = False 78 t3.Start() 79 80 Dim WaitedMSeconds1 As Integer = 0 81 Dim WaitedMSeconds2 As Integer = 0 82 Dim WaitedMSeconds3 As Integer = 0 83 84 Dim isT1WaitToBeNew As Boolean = False 85 Dim isT2WaitToBeNew As Boolean = False 86 Dim isT3WaitToBeNew As Boolean = False 87 88 Do While PermitNextTask 89 90 If (isT1WaitToBeNew = False) And ((Not t1.IsAlive) Or (WaitedMSeconds1 > 120000)) Then 91 '[Terminate T1] 92 If t1.ThreadState = Threading.ThreadState.Running Then 93 FThreadsParameters.AddLog(0, "▲ Try to terminate T1 thread.") 94 End If 95 'FThreadsParameters.AddLog(0,"Current T1 Status 0: " & t1.ThreadState.ToString) 96 Try 97 t1.Abort() 98 t1.Join() 99 Catch ex As Exception 100 FThreadsParameters.AddLog(0, "Failed to Terminate T1 thread. (Error Message: " & ex.ToString & ")") 101 End Try 102 'FThreadsParameters.AddLog(0, "Current T1 Status: " & t1.ThreadState.ToString) 103 104 '[Re New T1] 105 isT1WaitToBeNew = True 106 WaitedMSeconds1 = 0 107 End If 108 If (isT1WaitToBeNew = True) And (WaitedMSeconds1 > 10000) Then 109 t1 = New System.Threading.Thread(New System.Threading.ThreadStart(AddressOf FSubscribeSender1.Start1)) 110 t1.IsBackground = False 111 t1.Start() 112 113 isT1WaitToBeNew = False 114 WaitedMSeconds1 = 0 115 End If 116 117 If (isT2WaitToBeNew = False) And ((Not t2.IsAlive) Or (WaitedMSeconds2 > 120000)) Then 118 '[Terminate T2] 119 If t2.ThreadState = Threading.ThreadState.Running Then 120 FThreadsParameters.AddLog(0, "▲ Try to terminate T2 thread.") 121 End If 122 'FThreadsParameters.AddLog(0,"Current T2 Status 0: " & t2.ThreadState.ToString) 123 Try 124 t2.Abort() 125 t2.Join() 126 Catch ex As Exception 127 FThreadsParameters.AddLog(0, "Failed to Terminate T2 thread. (Error Message: " & ex.ToString & ")") 128 End Try 129 'FThreadsParameters.AddLog(0, "Current T2 Status: " & t2.ThreadState.ToString) 130 131 '[Re New T2] 132 isT2WaitToBeNew = True 133 WaitedMSeconds2 = 0 134 End If 135 If (isT2WaitToBeNew = True) And (WaitedMSeconds2 > 10000) Then 136 t2 = New System.Threading.Thread(New System.Threading.ThreadStart(AddressOf FSubscribeSender2.Start2)) 137 t2.IsBackground = False 138 t2.Start() 139 140 isT2WaitToBeNew = False 141 WaitedMSeconds2 = 0 142 End If 143 144 If (isT3WaitToBeNew = False) And ((Not t3.IsAlive) Or (WaitedMSeconds3 > 120000)) Then 145 '[Terminate T3] 146 If t3.ThreadState = Threading.ThreadState.Running Then 147 FThreadsParameters.AddLog(0, "▲ Try to terminate T3 thread.") 148 End If 149 'FThreadsParameters.AddLog(0,"Current T3 Status 0: " & t3.ThreadState.ToString) 150 Try 151 t3.Abort() 152 t3.Join() 153 Catch ex As Exception 154 FThreadsParameters.AddLog(0, "Failed to Terminate T3 thread. (Error Message: " & ex.ToString & ")") 155 End Try 156 'FThreadsParameters.AddLog(0, "Current T3 Status: " & t3.ThreadState.ToString) 157 158 '[Re New T3] 159 isT3WaitToBeNew = True 160 WaitedMSeconds3 = 0 161 End If 162 If (isT3WaitToBeNew = True) And (WaitedMSeconds3 > 10000) Then 163 t3 = New System.Threading.Thread(New System.Threading.ThreadStart(AddressOf FSubscribeSender3.Start3)) 164 t3.IsBackground = False 165 t3.Start() 166 167 isT3WaitToBeNew = False 168 WaitedMSeconds3 = 0 169 End If 170 171 '[T0 sleep] 172 Application.DoEvents() 173 Threading.Thread.Sleep(100) 174 WaitedMSeconds1 = WaitedMSeconds1 + 100 175 WaitedMSeconds2 = WaitedMSeconds2 + 100 176 WaitedMSeconds3 = WaitedMSeconds3 + 100 177 Loop 178 End If 179 180 If Not PermitNextTask Then 181 FThreadsParameters.AddLog(0, "▲ PermitNextTask is false ▲: " & PermitNextTask) 182 183 'Terminate the exists T1 thread 184 Try 185 If t1.ThreadState = Threading.ThreadState.Running Then 186 t1.Abort() 187 t1.Join() 188 End If 189 Catch ex As Exception 190 End Try 191 192 'Terminate the exists T2 thread 193 Try 194 If t2.ThreadState = Threading.ThreadState.Running Then 195 t2.Abort() 196 t2.Join() 197 End If 198 Catch ex As Exception 199 End Try 200 201 'Terminate the exists T3 thread 202 Try 203 If t3.ThreadState = Threading.ThreadState.Running Then 204 t3.Abort() 205 t3.Join() 206 End If 207 Catch ex As Exception 208 End Try 209 210 FThreadsParameters.AddLog(0, "Stop OK. " & vbCrLf) 211 212 IsTaskRunning = False 213 214 End If 215 216 End Sub 217 218 Private Sub LogTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LogTimer.Tick 219 LogTXT.Text = FThreadsParameters.LogInfos(FThreadsParameters.CurrentLogThreadID) 220 End Sub 221 222 Private Sub CbBoxFreq_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CbBoxFreq.SelectedIndexChanged 223 FThreadsParameters.CurrentLogThreadID = CbBoxFreq.SelectedIndex 224 End Sub 225 226 End Class