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

質問編集履歴

1

追記

2018/11/08 02:02

投稿

xxx8
xxx8

スコア41

title CHANGED
File without changes
body CHANGED
@@ -82,4 +82,99 @@
82
82
  ### 補足情報(FW/ツールのバージョンなど)
83
83
 
84
84
  Visual Studio2010
85
- VB.NET
85
+ VB.NET
86
+
87
+ ### 追記
88
+
89
+ oEvWork.WaitOne(System.Threading.Timeout.Infinite)の前後でフラグの値を変更して
90
+ 実装するほかないのかと思います。
91
+
92
+ 実現したいことはAボタンが押されたときに
93
+ 現在のシグナル状態を取得するというものですが
94
+
95
+ 最終的な目的は、バックグラウンド処理が一時停止中の場合のみ
96
+ 他画面に遷移するということです。
97
+
98
+ いいコーディング等あればご教授ください。
99
+
100
+ 以下コードです。
101
+
102
+ ```ここに言語を入力
103
+
104
+
105
+ Public oEvWork As New System.Threading.ManualResetEvent(True)
106
+ Private oEvCancel As New System.Threading.ManualResetEvent(True)
107
+ Friend WithEvents BackgroundWorker As New System.ComponentModel.BackgroundWorker
108
+
109
+ 'New
110
+ Private bFlg As Boolean = False
111
+ 'New
112
+
113
+ Private Sub SubBackgroundWorkerDoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker.DoWork
114
+
115
+ For i = 0 To iCnt - 1
116
+
117
+ 'ReSet()状態
118
+ bFlg = False
119
+
120
+ 'oEvWorkがResetされているとSetされるまで無限に待機する
121
+ oEvWork.WaitOne(System.Threading.Timeout.Infinite)
122
+
123
+ 'Set()状態
124
+ bFlg = True
125
+
126
+
127
+ System.Threading.Thread.Sleep(iSleepTime)
128
+
129
+ 'バックグラウンド操作の進捗状況
130
+ Me.BackgroundWorker.ReportProgress(i)
131
+ Next
132
+ End Sub
133
+
134
+ ''' <summary>
135
+ ''' Startボタン
136
+ ''' </summary>
137
+ ''' <param name="sender"></param>
138
+ ''' <param name="e"></param>
139
+ ''' <remarks></remarks>
140
+ Private Sub SubBtnStart_Click(sender As System.Object, e As System.EventArgs) Handles btnStart.Click
141
+ Startする
142
+ oEvWork.Set()
143
+ End Sub
144
+
145
+ ''' <summary>
146
+ ''' Cancelボタン
147
+ ''' </summary>
148
+ ''' <param name="sender"></param>
149
+ ''' <param name="e"></param>
150
+ ''' <remarks></remarks>
151
+ Private Sub SubBtnCancel_Click(sender As System.Object, e As System.EventArgs) Handles btnCancel.Click
152
+ 'Cancelする
153
+ oEvWork.Reset()
154
+ End Sub
155
+
156
+ ''' <summary>
157
+ ''' Aボタン
158
+ ''' </summary>
159
+ ''' <param name="sender"></param>
160
+ ''' <param name="e"></param>
161
+ ''' <remarks></remarks>
162
+ Private Sub SubBtnA_Click(sender As System.Object, e As System.EventArgs) Handles btnA.Click
163
+
164
+
165
+     'バックグラウンド処理が途中の場合は待機
166
+ Do While bFlg = False
167
+ 'カーソルを待機状態にする
168
+ Cursor.Current = Cursors.WaitCursor
169
+ Loop
170
+
171
+ 'カーソルを元に戻す
172
+ Cursor.Current = Cursors.Default
173
+
174
+ 'バックグラウンド処理が一時停止中なので他画面を開く
175
+ Using oFrm As FrmXXX = New FrmXXX
176
+ oFrm.ShowDialog()
177
+ End Using
178
+ End Sub
179
+
180
+ ```