private void panel_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            LineTiming lineTiming = (LineTiming)e.UserState;
            int        index      = panelLines.IndexOf(lineTiming);

            if (index == -1)
            { // It's a new line bus coming soon here
                if (lineTiming.Timing == TimeSpan.Zero)
                {
                    return;
                }
                panelLines.Add(lineTiming);
                panelLines.Sort((lnTime1, lnTime2) => (int)(lnTime1.Timing - lnTime2.Timing).TotalMilliseconds);
            }
            else
            {
                if (lineTiming.Timing == TimeSpan.Zero)
                {
                    panelLines.Remove(lineTiming);
                }
                else
                {
                    panelLines.Sort((lt1, lt2) => (int)(lt1.Timing - lt2.Timing).TotalMilliseconds);
                }
            }
            lineTimingListView.ItemsSource = null;
            int count = (panelLines.Count < 5) ? panelLines.Count : 5;

            lineTimingListView.ItemsSource = panelLines.GetRange(0, count);
        }
 private void stationObserver(LineTiming lineTiming)
 => panelWorker.ReportProgress(0, lineTiming);