private void NetworkMonitoring() { while (true) { List <NetworkAdapter> adapters = networkMoniter.Refresh(); Application.Current.Dispatcher.BeginInvoke(new Action(() => { long uploadSpeed = 0; long downloadSpeed = 0; int i = 0; for (; i < adapters.Count; i += 1) { uploadSpeed += adapters[i].UploadSpeed; downloadSpeed += adapters[i].downloadSpeed; if (NetworkCollection.Count <= i) { NetworkCollection.Add(new NetworkModelView(adapters[i])); } else { NetworkCollection[i].Resolve(adapters[i]); } } while (NetworkCollection.Count > i) { NetworkCollection.RemoveAt(i); } speedQueue.Enqueue(uploadSpeed + downloadSpeed); while (speedQueue.Count > 200) { speedQueue.Dequeue(); } GlobalUploadSpeed = NetworkAdapter.GetSpeedString(uploadSpeed); GlobalDownloadSpeed = NetworkAdapter.GetSpeedString(downloadSpeed); Notify(() => GlobalUploadSpeed); Notify(() => GlobalDownloadSpeed); Notify(() => GraphPointCollection); })); Thread.Sleep(1000); } }