Zkusil jsem to s backgroundworkery , není potřeba řešit thread safe, případně lze zobrazit info o stavu běhu pomocí ProgressChanged. Pokud používáš Thread, lze taky zachytit jeho ukončení a nemusíš ukončené vlákno či vlákna držet ve smyčce s prodlevou, níže přidávám namátkou jeden příklad. Čekání by šlo asi realizovat i pomocí Thread.Join nebo se podívat na ThreadPool. Není známo, jak to vlastně konkrétně funguje, jak se vrací z vlákna výsledky, ale třeba to ještě začneš měřit rychlost u různých řešení a tunit na 130% ! :) Thread Complete Event : http://www.java2s.com/Tutorial/VB/0420Thread/Threadcompleteevent.htm
Imports System.Threading
Public Class Tester
Shared WithEvents oSquare As SquareClass = New SquareClass()
Public Shared Sub Main
Dim t As Thread
t = New Thread(AddressOf oSquare.CalcSquare)
oSquare.Value = 3
t.Start()
End Sub
Shared Sub SquareEventHandler(ByVal Square As Double) Handles oSquare.ThreadComplete
Console.WriteLine(Square)
End Sub
End Class
Public Class SquareClass
Public Value As Double
Public Square As Double
Public Event ThreadComplete(ByVal Square As Double)
Public Sub CalcSquare()
Square = Value * Value
RaiseEvent ThreadComplete(Square)
End Sub
End Class
Velkou inspiraci nalezneš také u Task, třeba v budoucnu. Existuje určitě přehršle řešení, třeba se tu objeví ještě další možnosti.
|