2009-03-09 7 views
0

Dans le code ci-dessous, j'ai un objet List. Je veux passer en revue chacun d'eux et affecter une valeur à l'une des propriétés de chaque objet Item. Pour obtenir la valeur, j'ai besoin d'appeler une méthode async d'un service WCF.Obtention de données à partir de méthodes WCF asynchrones dans une boucle foreach

Lorsque l'appel à mon service WCF se termine, comment puis-je prendre ces données et l'affecter à l'instance actuelle (i) dans itemsList? Y a-t-il un moyen d'accéder à i depuis mon événement xxxCompleted?

private void SomeMethod() 
{ 
    List<Item> itemsList = GetItems(); 

    foreach(Item i in itemsList) 
    { 
     MyClient client = new MyClient(); 
     client.GetSomeValueCompleted += client_GetSomeValueCompleted; 
     client.GetSomeValueAsync(i.ID); 
    } 
} 

private void client_GetSomeValueCompleted(object sender, GetSomeValueEventArgs e) 
{ 
    int id = e.Result; 
    // how do I assign this ID to my itemsList object, i ??? 
} 

Répondre

3

Vous pouvez transmettre l'instance de la classe MyClient en tant qu'userstate lors de l'appel de la méthode asynchrone.

Jetez un oeil à ce link

 

private void SomeMethod() 
{  
    List itemsList = GetItems();  
    foreach(Item i in itemsList)  
    {   
     MyClient client = new MyClient();  
     client.GetSomeValueCompleted += client_GetSomeValueCompleted;  
     client.GetSomeValueAsync(i.ID, client); 
    } 
} 

private void client_GetSomeValueCompleted(object sender, GetSomeValueEventArgs e) 
{ 
    int id = e.Result; 

    // how do I assign this ID to my itemsList object, i ??? 
    (e.UserState as MyClient).ID = id; 
} 

 
Questions connexes