private async void StartTraceRteBtn_Click(object sender, RoutedEventArgs e)
        {
            var stopWatch = new System.Diagnostics.Stopwatch();

            stopWatch.Start();
            hostsLookedUp               = 0;
            traceView.ItemsSource       = null;
            traceView.IsReadOnly        = true;
            fakeProgressBar.Visibility  = Visibility.Visible;
            startTraceRteBtn.Visibility = Visibility.Hidden;
            var currentPing = $"Current Ping: {(await pinger.GetSingleRoundTrip(IPAddress.Parse(host.IP), 64)).RoundTrip}ms";

            Logger.Info(currentPing);
            pingTimeLabel.Content = currentPing;
            TraceReplies.Clear();
            traceView.ItemsSource = TraceReplies;
            try
            {
                await RunTraceRoute();
            }
            catch (Exception)
            {
                Logger.Error("RunTraceRoute Cancelled");
                return;
            }
            Task allLookedUp = Task.WhenAll(HostNameLookupTasks);

            try
            {
                allLookedUp.Wait();
            }
            catch { }
            while (TraceReplies.Count != hostsLookedUp)
            {
                if (stopWatch.Elapsed == TimeSpan.FromMinutes(5))
                {
                    break;
                }
                try
                {
                    await Task.Delay(50, cancelToken.Token);                     // Keep waiting for the all of the hosts to get looked up. Use Task.Delay to prevent UI lockups.
                }
                catch
                {
                    break;
                }
            }
            fakeProgressBar.Visibility = Visibility.Hidden;
            CheckButtons();
            startTraceRteBtn.Visibility = Visibility.Visible;
            traceView.IsReadOnly        = false;
            stopWatch.Stop();
            Logger.Info($"Total trace route time {stopWatch.ElapsedMilliseconds}ms");
        }