Nejlepší by bylo zapouzdřit vlákno do třídy obsahující spouštěcí metodu a událost, která by nastala po dokončení operace. Alternativní jednoduché řešení které zde ukážu je zavolat metodu asynchronně a ta po dokončení zavolá jinou metodu, která zpracuje výsledek. Asynchronně spuštěná metoda běží ve vlastním vlákně v Thread Poolu.
Module Module1
'Delegát metody
Public Delegate Function ProcessNumbersCallback() As Array
Sub Main()
'Delegát zastupuje metodu uvedenou za slovem AddressOf
Dim numbersProcessor As New ProcessNumbersCallback(AddressOf ProcessNumbers)
'BeginInvoke spustí metodu asynchronně ve vlastním vlákně
'Metoda za slovem AddressOf bude zavolána po dokončení
'asynchronní operace.
numbersProcessor.BeginInvoke(AddressOf WriteResult, numbersProcessor)
'Čekat na stisk klávesy
Console.ReadKey()
End Sub
'Metoda která bude spuštěna asynchronně,
'signatura musí odpovídat delegátu
Function ProcessNumbers() As Array
Return New Integer() {1, 2, 3}
End Function
Sub WriteResult(ByVal result As IAsyncResult)
Dim numbersProcessor = DirectCast(result.AsyncState, ProcessNumbersCallback)
'EndInvoke vrací výsledek asynchronní operace
Dim numbers As Array = DirectCast(numbersProcessor.EndInvoke(result), Array)
'Zapsat hodnoty do konzole
Console.WriteLine("Tyto hodnoty byly zpracovány ve vlastním vlákně:")
For Each number As Integer In numbers
Console.WriteLine(number)
Next
End Sub
End Module
|