私はマルチスレッドで自分の手を試しています。スレッドを作成した後、作成したスレッドに参加しようとすると、UIがフリーズしているように見えます。私のスレッドに参加しないと、すべてがうまくいくようです。なぜthread.joinがvb.netのUIをフリーズするのですか
以下は私のコードです。
Public Class FrmGraphWithThreads
Dim t As Thread
Dim tlist As List(Of Thread)
Private Sub FrmGraphWithThreads_Load(sender As Object, e As EventArgs) Handles MyBase.Load
UpdateTextDelegate = New UpdateTextSub(AddressOf UpdateText)
tlist = New List(Of Thread)
End Sub
#Region " Delegate and Delegate SUB to update Text Box "
Private Delegate Sub UpdateTextSub(ByRef txtbx As TextBox, ByVal val As String)
Private UpdateTextDelegate As UpdateTextSub
Private Sub UpdateText(ByRef txtbx As TextBox, ByVal val As String)
txtbx.Text = val
End Sub
#End Region
Private Sub CalculateTable(ByVal itm As Object)
Dim _int = CInt(itm)
Dim i As Integer
If _int > 0 Then
Select Case _int
Case 1
For i = 1 To 10
Dim _val = _int * i
txtBx1.Invoke(UpdateTextDelegate, New Object() {txtBx1, _val.ToString})
Thread.Sleep(1000)
Next
Case 2
For i = 1 To 10
Dim _val = _int * i
txtBx2.Invoke(UpdateTextDelegate, New Object() {txtBx2, _val.ToString})
Thread.Sleep(1000)
Next
End Select
End If
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim i As Integer
For i = 1 To 2
t = New Thread(AddressOf CalculateTable)
t.Name = i.ToString
t.Start(i)
tlist.Add(t)
Thread.Sleep(10)
Next
For Each itm As Thread In tlist
itm.Join()'This causes freezing. Without join everything is working.
Next
End Sub
End Class
いずれのアイデアも大きな助けになります。
素晴らしいアイデア。アドバイスをありがとう。私がしたことは、私は他のスレッドを開始する新しいスレッドを開始したことです。 –
@NimitVachhani:あなたのコードがどのようなものかを正確に知ることは難しいですが、これはまだ素晴らしいアイデアのようには聞こえません。UIスレッドから 'Thread.Join'を使用しているのであれば、まだ問題があります。 –
編集したコードを私の質問に投稿します。 –