/// <summary> /// Adds continuations to analysis tasks so that the view model's properties are updated when /// each task has results available for display. /// </summary> /// <param name="tasks">The task record</param> void AddButtonContinuations(AnalysisTasks tasks) { AddButtonContinuation(tasks.LoadNyseData, t => { NyseMarketData = t.Result; }); AddButtonContinuation(tasks.LoadNasdaqData, t => { NasdaqMarketData = t.Result; }); AddButtonContinuation(tasks.LoadFedHistoricalData, t => { FedHistoricalData = t.Result; }); AddButtonContinuation(tasks.MergeMarketData, t => { MergedMarketData = t.Result; }); AddButtonContinuation(tasks.NormalizeHistoricalData, t => { NormalizedHistoricalData = t.Result; }); AddButtonContinuation(tasks.NormalizeMarketData, t => { NormalizedMarketData = t.Result; }); AddButtonContinuation(tasks.AnalyzeHistoricalData, t => { AnalyzedHistoricalData = t.Result; }); AddButtonContinuation(tasks.AnalyzeMarketData, t => { AnalyzedStockData = t.Result; }); AddButtonContinuation(tasks.ModelHistoricalData, t => { ModeledHistoricalData = t.Result; }); AddButtonContinuation(tasks.ModelMarketData, t => { ModeledMarketData = t.Result; }); AddButtonContinuation(tasks.CompareModels, t => { this.Recommendation = t.Result; this.StatusTextBoxText = (this.Recommendation == null) ? "Canceled" : this.Recommendation.Value; this.ModelState = State.Ready; }); tasks.ErrorHandler.ContinueWith( t => { if (t.Status == TaskStatus.Faulted) { this.StatusTextBoxText = "Error"; } this.ModelState = State.Ready; }, TaskScheduler.FromCurrentSynchronizationContext()); }
void OnRequestCalculate() { // Initialize the result properties to null ResetResultProperties(); // Place the view model into calculation mode ModelState = State.Calculating; // Update the property containing the status text StatusTextBoxText = "...calculating..."; // Start the analysis AnalysisTasks tasks = engine.DoAnalysisParallel(); // Add continuations so that view model properties are updated when each subtask completes AddButtonContinuations(tasks); }