回答編集履歴

1

Timerクラスを利用した方が簡潔かつ制御しやすいそうです

2020/04/22 07:43

投稿

sanapapa
sanapapa

スコア30

test CHANGED
@@ -1,55 +1,49 @@
1
- このようスレッド化てあげるほうが無難だと思いま
1
+ 軽率回答訳ございませんでした
2
2
 
3
- また、メインスレッドではないスレッドからGUI操作するにはデリゲートという仕組みを利用しま
3
+ dodox86様回答拝見調べなおしした
4
4
 
5
- 別途お調べくださ
5
+ Threadクラスを利用した制御はむしろ古やり方で、
6
6
 
7
+ Timerクラスを利用した方がdodox86様のおっしゃる通り簡潔に記載することができます。
7
8
 
9
+ ご参考までに以下サンプルソースです。
8
10
 
9
- ```VB.net
11
+ Timerの設置はフォームデザイナのツールボックス内にあります。
10
12
 
11
-
13
+ ```VB.NET
12
14
 
13
15
  Public Class Form1
14
16
 
17
+ Dim count = 0
18
+
15
19
  Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
16
20
 
17
- Dim t As New System.Threading.Thread(New System.Threading.ThreadStart(AddressOf StartSetLabelValueThread))
18
-
19
- 'スレッドを開始する
20
-
21
- t.Start()
21
+ Timer1.Start()
22
22
 
23
23
  End Sub
24
24
 
25
25
 
26
26
 
27
- Delegate Sub SetLabelValueDelegate(LabelText As String)
27
+ Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
28
28
 
29
+ Label1.Text = count
29
30
 
30
-
31
- Private Sub SetLabelValue(LabelText As String)
32
-
33
- Label1.Text = LabelText
34
-
35
- End Sub
36
-
37
-
38
-
39
- Private Sub StartSetLabelValueThread()
40
-
41
- For i = 0 To 10
31
+ count += 1
42
-
43
- Thread.Sleep(1000)
44
-
45
- Invoke(New SetLabelValueDelegate(AddressOf SetLabelValue), i.ToString)
46
-
47
- Next
48
32
 
49
33
  End Sub
50
34
 
51
35
  End Class
52
36
 
37
+ ```
53
38
 
54
39
 
40
+
55
- ```
41
+ ---
42
+
43
+
44
+
45
+ ~~このような形でスレッド化してあげるほうが無難だと思います。
46
+
47
+ また、メインスレッドではないスレッドからGUIの操作をするにはデリゲートという仕組みを利用します。
48
+
49
+ 別途お調べください。~~