2016-03-22 7 views
0

Ich habe eine asynchrone Methode mit void Rückgabetyp. Hier ist esuwp async-Methode überspringt Codezeilen

public static async void LoadPlaylists() 
{ 
    if(playlistitems.Count==0) 
    { 
     var playlists = await ApplicationData.Current.LocalFolder.GetFilesAsync(); 
     var c = playlists.Count; 
     foreach (var playlist in playlists) 
     { 
      var p = await Playlist.LoadAsync(playlist); 
      var image = new BitmapImage(); 
      if (p.Files.Count == 0) 
      { 
       image.UriSource = new Uri("ms-appx:///Assets/Wide310x150Logo.scale-200.png"); 
      } 
      else 
      { 
       image = await Thumbnail(p.Files[0]); 
      } 
      playlistitems.Add 
      (
       new PlaylistItem 
       { 
        playlist = p, 
        PlaylistName = playlist.DisplayName, 
        NumOfVid = p.Files.Count.ToString(), 
        Thumbnail = image 
       } 
      ); 
     } 
    } 
} 

Es ist eine öffentliche statische Methode, so kann ich es überall benutzen, ich benutze es auf der einen Seite, einige Daten zu laden, und es funktioniert gut, und es schließt diese Methode und dann nach vorne auf der nächsten Code bewegen Linie. wie unten

private void l1_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    //some more code 
    LoadPlaylists(); 
    //some more code 
} 

gezeigt Aber wenn ich es auf einer anderen Seite in einem anderen Event-Handler verwenden, die nicht Asynchron-Methode ist, läuft es nur die erste Zeile, und dann springt es ganze Methode und nach vorne bewegt. Ich weiß sicher, dass es diese Zeilen überspringt, bcz, ich habe es mit dem Breakpoint überprüft, ich weiß, dass es hüpft, weil es asynchron ist, aber ich will das nicht, ich will nur, dass es die ganze Methode vervollständigt und dann vorwärts geht. So, dass ich bei den nächsten Codezeilen kein Problem bekomme. Ich füge den folgenden Code wieder hinzu, um Ihnen mit Kommentaren zu zeigen, was es skippt.

public static async void LoadPlaylists() 
{ 
    if(playlistitems.Count==0) 
    { 
     //it runs till here, when compiler goes to line below 
     //it skips whole methods and exits it. 
     var playlists = await ApplicationData.Current.LocalFolder.GetFilesAsync(); 
     var c = playlists.Count; 
     foreach (var playlist in playlists) 
     { 
      var p = await Playlist.LoadAsync(playlist); 
      var image = new BitmapImage(); 
      if (p.Files.Count == 0) 
      { 
       image.UriSource = new Uri("ms-appx:///Assets/Wide310x150Logo.scale-200.png"); 
      } 
      else 
      { 
       image = await Thumbnail(p.Files[0]); 
      } 

      playlistitems.Add 
      (
       new PlaylistItem 
       { 
        playlist = p, 
        PlaylistName = playlist.DisplayName, 
        NumOfVid = p.Files.Count.ToString(), 
        Thumbnail = image 
       } 
      ); 
     } 
    } 
} 

Jetzt unten ist der Code, wo ich es in einem Asynchron-Event-Handler benutzen und whre es verursacht mir Problem.

+1

Geben Sie die Aufgabe statt void ein, damit Sie auf die Beendigung der Methode warten können. – Archana

Antwort

3

Sie sollten die Aufgabe anstelle von void zurückgeben, damit Sie auf die Beendigung der Methode warten können.

+0

Async-Programmierung ist immer verwirrend ich vielen Dank :) –