Ниже у меня есть строка кода, которая вызывает SearchAlbums(text)
. Удаляя эту строку, я больше не получаю StackOverflowException
, поэтому я считаю, что эта строка доставляет мне неприятности.
public ObservableCollection<AlbumView> Albums = new ObservableCollection<AlbumView>();
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
if (e.Parameter is string text)
{
// User Search
MainPage.Instance.SetHeaderText(GetSearchHeader(text, MainPage.Instance.IsMinimal));
History.Push(text);
SearchArtists(text);
SearchAlbums(text);
SearchSongs(text);
SearchPlaylists(text);
}
else
{
// Back to Search Page
MainPage.Instance.SetHeaderText(GetSearchHeader(History.Pop(), MainPage.Instance.IsMinimal));
}
}
public void SearchAlbums(string text)
{
Albums.Clear();
foreach (var group in MusicLibraryPage.AllSongs.Where((m) => IsTargetAlbum(m, text)).GroupBy((m) => m.Album))
{
Music music = group.ElementAt(0);
Albums.Add(new AlbumView(music.Album, music.Artist, group.OrderBy((m) => m.Name).ThenBy((m) => m.Artist)));
}
}
Поэтому я установил точку останова в этой функции и фактически смог запуститьфункция без исключения. StackOverflowException
произошло после выполнения OnNavigatedTo
.
Я думаю, что конструктор AlbumView
может иметь к этому какое-то отношение:
public AlbumView(string name, string artist, IEnumerable<Music> songs)
{
Name = name;
Artist = artist;
Songs = new ObservableCollection<Music>(songs);
FindThumbnail();
}
public async void FindThumbnail()
{
foreach (var music in Songs)
if ((Cover = await Helper.GetThumbnailAsync(music, false)) != null)
break;
if (Cover == null) Cover = Helper.DefaultAlbumCover;
}
Но я также использую этот конструкторв другом месте на другой странице , и эта страница отображается отлично.
Первый фрагмент кода, размещенный выше, находится на этой странице . И исключение возникает, когда есть альбом матчей.
Я не знаю, как это исправить. Я могу только догадываться, что это может быть проблемой асинхронной операции. Заранее спасибо!