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