我會盡量以儘可能簡單的語言告訴我的問題。 在我UWP的應用程序,我加載數據異步聰明我Mainpage.xaml.cs`uwp c#異步方法等待數據未完全加載異常
public MainPage()
{
this.InitializeComponent();
LoadVideoLibrary();
}
private async void LoadVideoLibrary()
{
FoldersData = new List<FolderData>();
var folders = (await Windows.Storage.StorageLibrary.GetLibraryAsync
(Windows.Storage.KnownLibraryId.Videos)).Folders;
foreach (var folder in folders)
{
var files = (await folder.GetFilesAsync(Windows.Storage.Search.CommonFileQuery.OrderByDate)).ToList();
FoldersData.Add(new FolderData { files = files, foldername = folder.DisplayName, folderid = folder.FolderRelativeId });
}
}
所以這是我加載了FolderData對象的List的代碼。 有在我的其他頁面Library.xaml.cs我正在使用該數據加載我的GridView與綁定數據。
protected override void OnNavigatedTo(NavigationEventArgs e)
{
try
{
LoadLibraryMenuGrid();
}
catch { }
}
private async void LoadLibraryMenuGrid()
{
MenuGridItems = new ObservableCollection<MenuItemModel>();
var data = MainPage.FoldersData;
foreach (var folder in data)
{
var image = new BitmapImage();
if (folder.files.Count == 0)
{
image.UriSource = new Uri("ms-appx:///Assets/StoreLogo.png");
}
else
{
for (int i = 0; i < folder.files.Count; i++)
{
var thumb = (await folder.files[i].GetThumbnailAsync(Windows.Storage.FileProperties.ThumbnailMode.VideosView));
if (thumb != null) { await image.SetSourceAsync(thumb); break; }
}
}
MenuGridItems.Add(new MenuItemModel
{
numberofvideos = folder.files.Count.ToString(),
folder = folder.foldername,
folderid = folder.folderid,
image = image
});
}
GridHeader = "Library";
}
我面臨的問題是,當我啓動我的應用程序,等待幾秒鐘,然後我瀏覽到我的圖書館網頁,所有的數據加載正確。
但是當我嘗試啓動應用後立即導航到庫頁面,它給出了
「集合被修改,因此它不能被重複」
我用的斷點異常我知道,如果我給它幾秒鐘的列表文件夾數據已被正確加載asyncornously,但是當我dnt給它幾秒鐘,異步方法加載數據的一半,所以它會導致異常,如何我可以處理這種異步情況嗎?謝謝
http://stackoverflow.com/a/604843/447156? –
我的情況有點不同,我知道異常的原因,很明顯,但我不知道如何解決它,bcz我沒有太多的異步編程經驗 –