Obter dados a partir de métodos WCF assíncronas dentro de um loop foreach

votos
0

No código abaixo, eu tenho um objeto List. Eu quero fazer uma iteração através de cada um e atribuir um valor a uma das propriedades de cada objeto do item. Para obter o valor, eu preciso chamar um método assíncrono de um serviço WCF.

Quando a chamada para o meu serviço WCF completa, como faço para levar esses dados e atribuí-lo à instância atual (i) em itemsList? Existe uma maneira de acessar i do meu evento 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  ???
}
Publicado 09/03/2009 em 20:25
fonte usuário
Em outras línguas...                            


1 respostas

votos
3

Você pode passar a instância de classe MyClient como o userState na chamada método assíncrono.

Dê uma olhada nesta ligação


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;
}


Respondeu 09/03/2009 em 20:52
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more