/// <summary> /// Method should be called after construction to initialize the viewmodel /// to view a default content. /// </summary> public void InitPath(string initialPath) { IDirectoryBrowser[] pathItems; // Revert request to default if requested path is non-existing if (Browser.DirectoryExists(initialPath, out pathItems) == false) { initialPath = Browser.SysDefault.FullName; } Logger.InfoFormat("'{0}'", initialPath); var location = Browser.Create(initialPath); var cancelTokenSrc = GetCancelToken(); var token = CancellationToken.None; var InitTask = Task.Factory.StartNew(async(s) => { await BreadcrumbBrowser.InitPathAsync(); NavigateToFolder(location); }, token, TaskCreationOptions.LongRunning); var request = new BrowseRequest <IDirectoryBrowser>(location, RequestType.Navigational, token, cancelTokenSrc, InitTask); QueueTask(request); }
/// <summary> /// Master controler interface method to navigate all views /// to the folder indicated in <paramref name="folder"/> /// - updates all related viewmodels. /// </summary> /// <param name="request"></param> /// <param name="requestor"</param> private async Task <FinalBrowseResult <IDirectoryBrowser> > NavigateToFolderAsync( BrowseRequest <IDirectoryBrowser> request , object sender) { Logger.InfoFormat("'{0}'", request.NewLocation); // Make sure the task always processes the last input but is not started twice await _Semaphore.WaitAsync(); try { var newPath = request.NewLocation; var cancel = request.CancelTok; if (cancel != null) { cancel.ThrowIfCancellationRequested(); } var browseResult = await BreadcrumbBrowser.NavigateToAsync( request, "AppViewModel.NavigateToFolderAsync" ); return(browseResult); } catch (Exception exp) { var result = FinalBrowseResult <IDirectoryBrowser> .FromRequest(null, BrowseResult.InComplete); result.UnexpectedError = exp; return(result); } finally { _Semaphore.Release(); } }