teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

tuiki

2018/12/05 02:23

投稿

xxx8
xxx8

スコア41

title CHANGED
File without changes
body CHANGED
@@ -16,4 +16,98 @@
16
16
 
17
17
  VB.NET
18
18
 
19
- VisualStudio2010
19
+ ViualStudio2010
20
+
21
+
22
+ ### 追記
23
+
24
+ 外出のため編集できませんでした。
25
+ 以下に大まかな処理のコードを記載致します。
26
+
27
+ SubBackgroundWorkerProgressChangedのSelect~Caseの「-1」では
28
+ スレッドの一時停止処理を、Select~Caseの「-2」~「-4」では
29
+ 参照しているDLLを実行させています。
30
+ DLL内では主に、DBを検索しデータの取得・更新を行っています。
31
+
32
+ ```ここに言語を入力
33
+
34
+ Public oEvWork As New System.Threading.ManualResetEvent(True)
35
+ Friend WithEvents BackgroundWorker As New System.ComponentModel.BackgroundWorker
36
+ 'バックグラウンドワーカー一時停止フラグ(True:停止可/False:停止不可)
37
+ Private mbWakerStopFlg As Boolean = False
38
+
39
+   ''' <summary>
40
+ ''' 一時停止
41
+ ''' </summary>
42
+ ''' <param name="sender"></param>
43
+ ''' <param name="e"></param>
44
+ ''' <remarks></remarks>
45
+ Private Sub SubPause_Click(sender As System.Object, e As System.EventArgs) Handles Pause.Click
46
+ mbStopFlg = True
47
+ End Sub
48
+
49
+   ''' <summary>
50
+ ''' 再開
51
+ ''' </summary>
52
+ ''' <param name="sender"></param>
53
+ ''' <param name="e"></param>
54
+ ''' <remarks></remarks>
55
+ Private Sub SubReStart_Click(sender As System.Object, e As System.EventArgs) Handles ReStart.Click
56
+ mbStopFlg = False
57
+ oEvWork.Set()
58
+ End Sub
59
+
60
+   ''' <summary>
61
+ ''' バックグラウンドワーカー
62
+ ''' </summary>
63
+ ''' <param name="sender"></param>
64
+ ''' <param name="e"></param>
65
+ ''' <remarks></remarks>
66
+ Private Sub SubBackgroundWorkerDoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker.DoWork
67
+ 'カウンター
68
+ Dim iCnt As Integer
69
+
70
+ For i = 1 To iCnt
71
+
72
+       If mbStopFlg = True Then
73
+ Me.BackgroundWorker.ReportProgress(i, -1)
74
+ End If
75
+
76
+ Me.BackgroundWorker.ReportProgress(i, -2)
77
+
78
+ Me.BackgroundWorker.ReportProgress(i, -3)
79
+
80
+       'バックグラウンドワーカーがResetされているとSetされるまで無限に待機する
81
+ oEvWork.WaitOne(System.Threading.Timeout.Infinite)
82
+
83
+ Me.BackgroundWorker.ReportProgress(i, -4)
84
+ Next
85
+ End Sub
86
+
87
+   ''' <summary>
88
+ ''' バックグラウンドワーカーから処理を実行
89
+ ''' </summary>
90
+ ''' <param name="sender"></param>
91
+ ''' <param name="e"></param>
92
+ ''' <remarks></remarks>
93
+ Private Sub SubBackgroundWorkerProgressChanged(sender As System.Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker.ProgressChanged
94
+ 'カウンター
95
+ Dim iCnt As Integer
96
+
97
+ '引数をカウントに変換
98
+ iCnt = CType(e.UserState, Integer)
99
+
100
+ '実行処理分岐
101
+ Select Case iCnt
102
+ Case -1
103
+         oEvWork.Reset()
104
+
105
+ Case -2
106
+
107
+ Case -3
108
+
109
+ Case -4
110
+
111
+ End Select
112
+ End Sub
113
+ ```