2009-10-10 7 views
1

Je ne suis qu'un débutant. "ParameterizedThreadStart" accepte un seul objet comme argument.Gestion des paramètres dans les threads

est-il une autre signature délégué me permet de

(1) passer params (nombre variable de paramètres) sur fil?

(2) soutenir les paramètres génériques comme la liste?

Répondre

5

Vous pouvez faire tout ce que vous voulez avec un seul objet. Il suffit de définir une classe pour envelopper les paramètres qui vous intéressent:

class ThreadState 
{ 
    public ThreadState() 
    { 
    } 

    public string Name 
    { 
     get; 
     set; 
    } 

    public int Age 
    { 
     get; 
     set; 
    } 
} 

// ... 

ParameterizedThreadStart start = delegate(object objThreadState) 
{ 
    // cast to your actual object type 
    ThreadState state = (ThreadState)objThreadState; 

    // ... now do anything you want with it ... 
}; 
+0

Ou simplement passer un tableau d'objets. –

+0

Oui, vous pouvez également passer un tableau, qui est plus léger mais moins "typé". – bobbymcr

+0

m'a vraiment beaucoup aidé. Merci. – user186973

2

Vous pouvez utiliser Delegate.BeginInvoke et EndInvoke, pour passer tous les paramètres que vous voulez

delegate long MyFuncDelegate(int N); 

MyFuncDelegate cpn = new MyFuncDelegate(MyFunc); 

IAsyncResult ar = cpn.BeginInvoke(3, null, null); 

// Do some stuff 
while(!ar.IsCompleted) 
{ 
    // Do some stuff 
} 

// we now know that the call is 
// complete as IsCompleted has 
// returned true 
long answer = cpn.EndInvoke(ar); 
0

Soit dit en passant, avec les génériques, il est utile de définir des classes telles que Doer (Of T1), Doer (Of T1, T2), etc. qui ont champ (s) V1 comme T1, V2 comme T2, etc., et ActionAction As (de T1, T2) etc. et une seule méthode Exec (void), etc. qui appelle l'Action (V1, V2) et une méthode d'usine statique. Cela rend très facile l'assemblage d'un MethodInvoker qui appelle une fonction avec les paramètres appropriés, même dans VS2005.

Questions connexes