2010-09-03 6 views
2

J'ai une application Silverlight qui récupère des données de la base de données via un service WCF. Qu'est-ce que mon application doit faire est d'afficher les données de référence chaque fois qu'un bouton obtient MouseOvered. Je l'ai fait d'une manière que quand un bouton obtient MouseOvered, j'ai appelé mon service et récupéré les données, mais il générera un grand retard. Maintenant, je pense qu'une autre façon devrait être de faire une liste de tous les objets de la table, et de simplement chercher l'identifiant dans la liste lorsque l'action est déclenchée. J'ai commencé à coder, mais il en a résulté un échec (et un tel morceau de code laid).Comment faire pour que les données de mon service WCF soient stockées dans mon application Silverlight?

Mon travail sur le code

private void MouseOverHarbor(object sender, RoutedEventArgs e) 
{ 
    Ellipse thisPath = (Ellipse)sender; 
    DataRetrieverReference.DataRetrieverClient webService = new DataRetrieverReference.DataRetrieverClient(); 
    webService.GetDataCompleted += new EventHandler<DataRetrieverReference.GetDataCompletedEventArgs>(webService_GetDataCompleted); 
    webService.GetDataAsync(Convert.ToInt32(thisPath.DataContext)); 
} 

void webService_GetDataCompleted(object sender, WebPortos.DataRetrieverReference.GetDataCompletedEventArgs e) 
{ 
    NameField.Text = e.Result.Name; 
    CityField.Text = e.Result.City; 
    StateField.Text = e.Result.State; 
    CompanyField.Text = e.Result.Company; 
} 

Ce que j'ai essayé de faire

private List<vwPortos_SEP> harborList; 
private int counter; 

public Brasil() 
{ 
    InitializeComponent(); 
    this.harborList = new List<vwPortos_SEP>(); 

    DataRetrieverClient webService = new DataRetrieverClient(); 
    webService.GetCounterCompleted += new EventHandler<GetCounterCompletedEventArgs>(webService_GetCounterCompleted); 
    webService.GetCounterAsync(); 
    webService.GetDataCompleted += new EventHandler<DataRetrieverReference.GetDataCompletedEventArgs>(webService_GetDataCompleted); 

    for (int i = 0; i < counter; i++) 
    {         
     webService.GetDataAsync(i); 
    }    

} 

void webService_GetDataCompleted(object sender, WebPortos.DataRetrieverReference.GetDataCompletedEventArgs e) 
{ 
    MessageBox.Show("It works!");//It doesn't work! 
    try 
    { 
     this.harborList.Add(e.Result); 
    } 
    catch (Exception exc)//It doesn't even throw ecxpetions, this method is never reached. 
    { 
     MessageBox.Show(exc.Message); 
     MessageBox.Show(exc.InnerException.Message); 
    } 
} 

Peut-être que je manque quelque chose de vraiment grand, mais ma méthode webService_GetDataCompleted est jamais atteint.

Merci d'avance les gens!

Répondre

1

Est-ce appel:

webService.GetCounterAsync(); 

utilisé pour définir counter?

Si c'est le cas, vous ne le laissez pas terminer avant de boucler avec counter comme valeur de terminaison. Il est très probable que counter est toujours 0, donc vos appels GetDataAsync ne se produisent pas.

for (int i = 0; i < counter; i++) 
{         
    webService.GetDataAsync(i); 
} 

Déplacer ce code dans votre méthode webService_GetCounterCompleted, de sorte que votre code devient:

public Brasil() 
{ 
    InitializeComponent(); 
    this.harborList = new List<vwPortos_SEP>(); 

    DataRetrieverClient webService = new DataRetrieverClient(); 
    webService.GetCounterCompleted += 
     new EventHandler<GetCounterCompletedEventArgs>(webService_GetCounterCompleted); 
    webService.GetCounterAsync(); 
} 

void webService_GetCounterCompleted(object sender, 
     WebPortos.DataRetrieverReference.GetCounterCompletedEventArgs e) 
{ 
    webService.GetDataCompleted += 
    new EventHandler<DataRetrieverReference.GetDataCompletedEventArgs>(webService_GetDataCompleted); 

    for (int i = 0; i < counter; i++) 
    {         
     webService.GetDataAsync(i); 
    } 
} 

plus votre méthode webService_GetDataCompleted existante.

Questions connexes