Witam,
dlaczego w tym prostym kodzie wątki nie pracują równocześnie?
@some_ONE podpowiedział że w aplikacji źle wykonuję Invoke, gdyż każdy z wątków wykonuje dalsze operacje w btn1_move zamiast w wątku to w aplikacji głównej (po else).
Chciałbym wiedzieć, w jaki sposób mogę ingerować z poziomu wątku w buttony / textboxy znajdujące się na Form1 ?
Jak widać na screenie , buttony przemieszczają się w różnych odstępkach czasowych zamiast jednocześnie.
Imports System.Threading
Public Delegate Function Pomocnik(o As Integer)
Public Class Form1
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
'TU URUCHAM WĄTKI
For i As Integer = 1 To 100
Dim T1 As New Thread(New ThreadStart(Sub() btn1_move(i)))
T1.Start()
Dim T2 As New Thread(New ThreadStart(Sub() btn2_move(i)))
T2.Start()
Dim T3 As New Thread(New ThreadStart(Sub() btn3_move(i)))
T3.Start()
Next
End Sub
'FUNKCJA ZMIENIA POZYCJE BUTTONA
Public Function btn1_move(o As Integer)
Thread.Sleep(500)
If InvokeRequired Then
Me.Invoke(New Pomocnik(AddressOf btn1_move), o)
Else
Button1.Location = New Point(Button1.Location.X + o, Button1.Location.Y)
End If
End Function
'FUNKCJA ZMIENIA POZYCJE BUTTONA
Public Function btn2_move(o As Integer)
Thread.Sleep(500)
If InvokeRequired Then
Me.Invoke(New Pomocnik(AddressOf btn2_move), o)
Else
Button2.Location = New Point(Button2.Location.X + o, Button2.Location.Y)
End If
End Function
'FUNKCJA ZMIENIA POZYCJE BUTTONA
Public Function btn3_move(o As Integer)
Thread.Sleep(500)
If InvokeRequired Then
Me.Invoke(New Pomocnik(AddressOf btn3_move), o)
Else
Button3.Location = New Point(Button3.Location.X + o, Button3.Location.Y)
End If
End Function
End Class
Thread.Sleep
wywoływane na wątku UI.