DOBON.NET DOBON.NETプログラミング掲示板過去ログ

複数のスレッドでフォームへの更新について

環境/言語:[WindowsXP]
分類:[.NET]

いつもお世話になります。
WindowsXP SP3/VB.NET 2005 でコーディングしております。

------------------------------------------------------------------------
Private trd1 As Threading.Thread
Private trd2 As Threading.Thread

Private Sub bt_start_Click(・・・) Handles bt_start.Click
Me.lbl_cnt_1.Text = 0
Me.lbl_cnt_2.Text = 0

trd1 = New Threading.Thread(AddressOf SetCount1)
trd1.IsBackground = True
trd1.Start()

trd2 = New Threading.Thread(AddressOf SetCount2)
trd2.IsBackground = True
trd2.Start()
End Sub

Delegate Sub delegate1()
Private Sub SetCount1()
BeginInvoke(New delegate1(AddressOf _SetCount1))
End Sub
Private Sub _SetCount1()
For i As Integer = 0 To 4
Me.lbl_cnt_1.Text = (CType(Me.lbl_cnt_1.Text, Integer) + 1).ToString
Sleep(1000)
Application.DoEvents()
Next
End Sub

Delegate Sub delegate2()
Private Sub SetCount2()
BeginInvoke(New delegate2(AddressOf _SetCount2))
End Sub
Private Sub _SetCount2()
For i As Integer = 0 To 4
Me.lbl_cnt_2.Text = (CType(Me.lbl_cnt_2.Text, Integer) + 1).ToString
Sleep(1000)
Application.DoEvents()
Next
End Sub
------------------------------------------------------------------------

以上のように、ボタン(bt_start)を押下したとき、2つのスレッド
(trd1、trd2)をキックオフして、同じフォームにある2つのラベル
(lbl_cnt_1、lbl_cnt_2)の表示をそれぞれ更新しようとします。

しかし、ラベルの表示が「同時」に更新されたでなく、以下の順番に
なってしまうのです。
@lbl_cnt_1の表示が「0⇒1」。(←表示が0から1になる)
Albl_cnt_2の表示が「0⇒1」。
Blbl_cnt_2か、lbl_cnt_1の表示が「1⇒2⇒3⇒4⇒5」。
C残りのlbl_cnt_1か、lbl_cnt_2の表示が「1⇒2⇒3⇒4⇒5」。

どうしてラベルの表示が同時に更新されないでしょうか
ご教授をお願いいたします。
■No27316に返信(agloomyrocさんの記事)
スレッドは同期実行を保証するものではありません。
ラベルの表示を同時に変えたいのなら、スレッドを一つにするか同期処理を行う必要があります。

DOBON.NET | プログラミング道 | プログラミング掲示板