2010-02-07 13 views
2

Chaque fois que je veux faire un thread dans le ThreadPool, je fais une petite fonction stupide comme Worker_O ci-dessous.Comment puis-je utiliser le ThreadPool sans faire Sub foo (o comme objet) à chaque fois?

Sub Worker(ByVal i As Integer) 
    'do important stuff 
End Sub 

Sub Worker_O(ByVal o as Object) 
    Worker(CType(o, Integer)) 
End Sub 

Sub MakeThread() 
    Dim worker1 as new Threading.WaitCallback(AddressOf Worker_O)) 
    Threading.ThreadPool.QueueUserWorkItem(worker1) 
End Sub 

Est-il possible dans VB .NET à jeter de Sub (i comme nombre entier) à Sub (o comme objet) sans faire Worker_O? Worker_O est moche pour moi. J'utilise Option Explicit On et tous les avertissements sont des erreurs, comme un bon programmeur devrait le faire.

Répondre

3

Un lambda peut résoudre proprement ceci:

Sub MakeThread() 
    Threading.ThreadPool.QueueUserWorkItem(Function() Worker(42)) 
    End Sub 

    Function Worker(ByVal arg As Integer) As Integer 
    ' etc... 
    End Function 

Cependant, lambdas qui peuvent appeler un sous ne sera pas disponible avant VS2010.

+0

Donc je viens de changer le Sub en fonction, retourner une valeur de poubelle dans cette fonction, et le lambda va fonctionner? – Eyal

+1

Oui (15 caractères). –