private void btnShowStatistics_Click(object sender, RoutedEventArgs e) { this.progressBarStatistics.Visibility = System.Windows.Visibility.Visible; BackgroundWorker getStatsWorker = new BackgroundWorker(); int timeRange = this.comboTimeRange.SelectedIndex; Dictionary<byte, decimal> downloadedStats = new Dictionary<byte, decimal>(); Dictionary<byte, decimal> uploadedStats = new Dictionary<byte, decimal>(); ObservableCollection<KeyValuePair<byte, decimal>> downloaded = new ObservableCollection<KeyValuePair<byte, decimal>>(); Series downSeries = new LineSeries { Title = "Downloaded", DependentValuePath = "Value", IndependentValuePath = "Key", ItemsSource = downloaded, DataPointStyle = (Style)FindResource("downLine") }; ObservableCollection<KeyValuePair<byte, decimal>> uploaded = new ObservableCollection<KeyValuePair<byte, decimal>>(); Series upSeries = new LineSeries { Title = "Uploaded", DependentValuePath = "Value", IndependentValuePath = "Key", ItemsSource = uploaded, DataPointStyle = (Style)FindResource("upLine") }; if (this.chartTraffic.Series.Count == 0) { this.chartTraffic.Series.Add(downSeries); this.chartTraffic.Series.Add(upSeries); } getStatsWorker.DoWork += new DoWorkEventHandler((o, args) => { PacketSerializer serializer = new PacketSerializer("packets.bin"); List<Packet> allPackets = serializer.DeserializeAllPackets(); TrafficStatistics statistics = new TrafficStatistics(allPackets); switch (timeRange) { case 0: downloadedStats = statistics.GetDownloadedLastHour(); uploadedStats = statistics.GetUploadedLastHour(); this.lblTimeValue.Dispatcher.BeginInvoke(new Action(() => { this.lblTimeValue.Content = "Minutes"; })) ; break; case 1: downloadedStats = statistics.GetDownloadedLastDay(); uploadedStats = statistics.GetUploadedLastDay(); this.lblTimeValue.Dispatcher.BeginInvoke(new Action(() => { this.lblTimeValue.Content = "Hours"; })); break; case 3: downloadedStats = statistics.GetDownloadedLastWeek(); uploadedStats = statistics.GetUploadedLastWeek(); this.lblTimeValue.Dispatcher.BeginInvoke(new Action(() => { this.lblTimeValue.Content = "Days"; })); break; case 4: downloadedStats = statistics.GetDownloadedLastMonth(); uploadedStats = statistics.GetUploadedLastMonth(); this.lblTimeValue.Dispatcher.BeginInvoke(new Action(() => { this.lblTimeValue.Content = "Days"; })); break; } Dispatcher.BeginInvoke(new Action(() => { foreach (var key in downloadedStats.Keys) { downloaded.Add(new KeyValuePair<byte, decimal>(key, downloadedStats[key] / 1000000)); } foreach (var key in uploadedStats.Keys) { uploaded.Add(new KeyValuePair<byte, decimal>(key, uploadedStats[key] / 1000000)); } })); allPackets.Clear(); statistics.Dispose(); }); getStatsWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler((o, args) => { this.progressBarStatistics.Visibility =System.Windows.Visibility.Collapsed; this.chartTraffic.Visibility = System.Windows.Visibility.Visible; }); getStatsWorker.RunWorkerAsync(); }
private void btnShowAppStatistics_Click(object sender, RoutedEventArgs e) { progressBarAppStatistics.Visibility = Visibility.Visible; BackgroundWorker statsWorker = new BackgroundWorker(); Dictionary<string, long> stats = new Dictionary<string, long>(); statsWorker.DoWork += new DoWorkEventHandler((o, args) => { PacketSerializer serializer = new PacketSerializer("packets.bin"); TrafficStatistics statistics = new TrafficStatistics(serializer.DeserializeAllPackets()); stats = statistics.GetApplicationStatistics(); }); statsWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler((o, args) => { btnShowAppStatistics.Visibility = Visibility.Collapsed; chartApplications.DataContext = stats; progressBarAppStatistics.Visibility = Visibility.Collapsed; chartApplications.Visibility = Visibility.Visible; }); statsWorker.RunWorkerAsync(); }