2010-09-24 6 views
1

donc j'ai cette fonction qui est appelée plusieurs fois au cours de mon programme.synchronisation webClient téléchargement (silverlight)

//global variable 
    BitmapImage img; 

    private void LoadImageFile(string ImageName) 
    { 
     WebClient ImageClient = new WebClient(); 
     ImageClient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(ImageFileLoaded); 
     xmlClient.DownloadStringAsync(new Uri("/images/"+ImageName, UriKind.RelativeOrAbsolute)); 
    } 

    void ImageFileLoaded(object sender, DownloadStringCompletedEventArgs e) 
    { 
     if (e.Error == null) 
     { 
      img.set = e.Result; 



     } 
    } 

le code suivant utilise la nouvelle valeur de « img » donc je veux qu'il commence seulement après img a été attribué la nouvelle source, mais il semble qu'il fonctionne avant que cela arrive

Répondre

0

Vous souhaitez utiliser WebClient.OpenReadAsync() au lieu de WebClient.DownloadStringAsync() car vous souhaitez lire une image binaire, pas une chaîne.

Ensuite, lorsque vous obtenez le flux, vous appelez BitmapImage.SetSource() en utilisant ce flux.

0

Je vérifierais ce blog par Jeremy Likness.

Il utilise des corountines pour organiser les requêtes asynchrones. J'ai utilisé cette approche et j'ai traité des problèmes similaires où je veux que des actions se produisent après plusieurs tâches asynchrones.

Questions connexes