private async void LoadChildFolder(FolderInfo folder) { cancelTokenSource = new CancellationTokenSource(); await Task.Run(async() => { await DispatcherHelper.RunAsync(() => { CheckListButtonEnable = false; }); StorageFolder stFolder = null; //현재 폴더가 저장되지 않았거나, 위로 버튼을 눌러 이동하다 최 상위가 된 경우 if (folder == null || folder.Level == 0) { LoadRootFolders(); return; } else { try { stFolder = await folder.GetStorageFolder(false); } catch (Exception) { //현재 폴더 삭제 DB 물리적 삭제 if (folder.Type == FolderType.Last) { var asyncAction = folderDAO.Delete(folder); //문제가 발생한 경우 루트 폴더를 로드 LoadRootFolders(); } return; } } await DispatcherHelper.RunAsync(() => { if (ExplorerFolderSource.Count > 0) { ExplorerFolderSource.Clear(); } if (ExplorerFileSource.Count > 0) { ExplorerFileSource.Clear(); } ExplorerFolderSource.Add(new FolderInfo() { Level = folder.Level - 1, Name = string.Format(".. ({0})", ResourceLoader.GetForCurrentView().GetString("ToUpper")), Path = folder.ParentFolderPath, Type = FolderType.Upper, }); }); try { var folderList = (await stFolder.GetFoldersAsync()).OrderBy(x => x.Name); if (folderList != null && folderList.Any()) { await LoadFolderList(folderList, folder, cancelTokenSource.Token); } var fileStorageList = (await stFolder.GetFilesAsync()).OrderBy(x => x.Name); var fileList = fileStorageList.Where(x => x.IsVideoFile()); if (fileList != null && fileList.Any()) { await AddExplorerList(fileList, fileStorageList.Where(x => x.IsSubtitleFile()).ToList(), folder, cancelTokenSource.Token); await DispatcherHelper.RunAsync(() => { CheckListButtonEnable = true; }); } } catch (OperationCanceledException ex) { //DispatcherHelper.CheckBeginInvokeOnUI(() => { ExplorerFolderSource.Clear(); }); System.Diagnostics.Debug.WriteLine("폴더 네비게이션 취소됨 : " + ex.CancellationToken.GetHashCode()); } }, cancelTokenSource.Token); }