private void myWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            //cd.Source = (List<IGrouping<int, Contract>>)e.Result;
            //this.page.Content = cd;
            ContractDistance cd = new ContractDistance();

            cd.Source = (List <IGrouping <int, Contract> >)e.Result;

            this.page.Content = cd;
        }
        private void GroupContByDistanceButton_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                ContractDistance cd = new ContractDistance();

                BackgroundWorker myWorker = new BackgroundWorker();
                myWorker.DoWork             += myWorker_DoWork;
                myWorker.RunWorkerCompleted += myWorker_RunWorkerCompleted;
                myWorker.RunWorkerAsync();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        private void GroupContByDistanceButton_Click(object sender, RoutedEventArgs e)
        {
            Thread thread = new Thread(myTry);

            thread.SetApartmentState(ApartmentState.STA);
            thread.Start();
            void myTry()
            {
                try
                {
                    //Setopwatch stopwatch=new Stopwatch();
                    //Thread timeThread=new Thread();
                    ContractDistance cd = new ContractDistance();
                    cd.Source         = bl.GroupContractsByDistance();
                    this.page.Content = cd;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }