質問編集履歴

1

追記

2018/11/08 02:02

投稿

xxx8
xxx8

スコア41

test CHANGED
File without changes
test CHANGED
@@ -167,3 +167,193 @@
167
167
  Visual Studio2010
168
168
 
169
169
  VB.NET
170
+
171
+
172
+
173
+ ### 追記
174
+
175
+
176
+
177
+ oEvWork.WaitOne(System.Threading.Timeout.Infinite)の前後でフラグの値を変更して
178
+
179
+ 実装するほかないのかと思います。
180
+
181
+
182
+
183
+ 実現したいことはAボタンが押されたときに
184
+
185
+ 現在のシグナル状態を取得するというものですが
186
+
187
+
188
+
189
+ 最終的な目的は、バックグラウンド処理が一時停止中の場合のみ
190
+
191
+ 他画面に遷移するということです。
192
+
193
+
194
+
195
+ いいコーディング等あればご教授ください。
196
+
197
+
198
+
199
+ 以下コードです。
200
+
201
+
202
+
203
+ ```ここに言語を入力
204
+
205
+
206
+
207
+
208
+
209
+ Public oEvWork As New System.Threading.ManualResetEvent(True)
210
+
211
+ Private oEvCancel As New System.Threading.ManualResetEvent(True)
212
+
213
+ Friend WithEvents BackgroundWorker As New System.ComponentModel.BackgroundWorker
214
+
215
+
216
+
217
+ 'New
218
+
219
+ Private bFlg As Boolean = False
220
+
221
+ 'New
222
+
223
+
224
+
225
+ Private Sub SubBackgroundWorkerDoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker.DoWork
226
+
227
+
228
+
229
+ For i = 0 To iCnt - 1
230
+
231
+
232
+
233
+ 'ReSet()状態
234
+
235
+ bFlg = False
236
+
237
+
238
+
239
+ 'oEvWorkがResetされているとSetされるまで無限に待機する
240
+
241
+ oEvWork.WaitOne(System.Threading.Timeout.Infinite)
242
+
243
+
244
+
245
+ 'Set()状態
246
+
247
+ bFlg = True
248
+
249
+
250
+
251
+
252
+
253
+ System.Threading.Thread.Sleep(iSleepTime)
254
+
255
+
256
+
257
+ 'バックグラウンド操作の進捗状況
258
+
259
+ Me.BackgroundWorker.ReportProgress(i)
260
+
261
+ Next
262
+
263
+ End Sub
264
+
265
+
266
+
267
+ ''' <summary>
268
+
269
+ ''' Startボタン
270
+
271
+ ''' </summary>
272
+
273
+ ''' <param name="sender"></param>
274
+
275
+ ''' <param name="e"></param>
276
+
277
+ ''' <remarks></remarks>
278
+
279
+ Private Sub SubBtnStart_Click(sender As System.Object, e As System.EventArgs) Handles btnStart.Click
280
+
281
+ Startする
282
+
283
+ oEvWork.Set()
284
+
285
+ End Sub
286
+
287
+
288
+
289
+ ''' <summary>
290
+
291
+ ''' Cancelボタン
292
+
293
+ ''' </summary>
294
+
295
+ ''' <param name="sender"></param>
296
+
297
+ ''' <param name="e"></param>
298
+
299
+ ''' <remarks></remarks>
300
+
301
+ Private Sub SubBtnCancel_Click(sender As System.Object, e As System.EventArgs) Handles btnCancel.Click
302
+
303
+ 'Cancelする
304
+
305
+ oEvWork.Reset()
306
+
307
+ End Sub
308
+
309
+
310
+
311
+ ''' <summary>
312
+
313
+ ''' Aボタン
314
+
315
+ ''' </summary>
316
+
317
+ ''' <param name="sender"></param>
318
+
319
+ ''' <param name="e"></param>
320
+
321
+ ''' <remarks></remarks>
322
+
323
+ Private Sub SubBtnA_Click(sender As System.Object, e As System.EventArgs) Handles btnA.Click
324
+
325
+
326
+
327
+
328
+
329
+     'バックグラウンド処理が途中の場合は待機
330
+
331
+ Do While bFlg = False
332
+
333
+ 'カーソルを待機状態にする
334
+
335
+ Cursor.Current = Cursors.WaitCursor
336
+
337
+ Loop
338
+
339
+
340
+
341
+ 'カーソルを元に戻す
342
+
343
+ Cursor.Current = Cursors.Default
344
+
345
+
346
+
347
+ 'バックグラウンド処理が一時停止中なので他画面を開く
348
+
349
+ Using oFrm As FrmXXX = New FrmXXX
350
+
351
+ oFrm.ShowDialog()
352
+
353
+ End Using
354
+
355
+ End Sub
356
+
357
+
358
+
359
+ ```