public void Analyze(BackgroundWorker worker) { GlobalStatsCalculator = new GlobalStatsCalculator(this); GlobalStatsCalculator.OnProgressChanged += (d, s) => worker.ReportProgress((int)d, s); Linker = new Linker(this); Linker.OnProgressChanged += (d, s) => worker.ReportProgress((int)d, s); Linker.DetectEvents(); foreach (var intermediary in Intermediaries) { var bsc = new BrokerStatisticsCalculator(intermediary.Value, this); bsc.OnProgressChanged += (d, s) => worker.ReportProgress((int)d, s); bsc.CalculateStats(); intermediary.Value.Stats = bsc; var ic = new InsightCalculator(this, intermediary.Value); ic.OnProgressChanged += (d, s) => worker.ReportProgress((int)d, s); ic.RecommendInsights(); intermediary.Value.Insights = ic; } GlobalStatsCalculator.CalculateStats(); }