예제 #1
0
 private void Muovi()
 {
     if (!muovi.IsAlive)
     {
         lock (x)
         {
             //lstPiani.ItemsSource = Ascensore.Fila;
             //il thread è fermo, lo faccio ripartire
             Destinazione = Ascensore.Vai();
             muovi        = new Thread(new ThreadStart(MuoviAscensore));
             muovi.Start();
         }
     }
 }
예제 #2
0
        public Piano Vai()
        {
            try
            {
                Piano toReturn = GetPiano(Peek());
                Piano = Pop(); //sezione critica : il dequeue

                return(toReturn);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
예제 #3
0
        private void MuoviAscensore()
        {
            //devo capire se scende o se sale
            //TODO : Animazione
            int       pSalite, pScese;
            Thickness t = new Thickness(0);

            this.Dispatcher.BeginInvoke(new Action(() =>
            {
                t = grdAscensore.Margin;
            }));

            Thread.Sleep(150);
            topCorrente     = t.Top;
            topDestinazione = Destinazione.MarginTop;
            //AnimazioneAscensore();
            Thread m = new Thread(new ThreadStart(AnimazioneAscensore));

            m.Start();
            m.Join();

            pScese  = Ascensore.QuantiScendono();
            pSalite = Ascensore.Arrivato();
            bool cancellaOmino = true;

            if (Ascensore.Piani[Ascensore.Piano].NPersone > 0)
            {
                cancellaOmino = false;
            }
            this.Dispatcher.BeginInvoke(new Action(() =>
            {
                if (cancellaOmino)
                {
                    switch (Ascensore.Piano)
                    {
                    case 0:
                        o0             = new Omino(new Thickness(0, o0.MarginTop, 0, 0), 50);
                        p_0.Visibility = Visibility.Hidden;
                        p_0.Margin     = new Thickness(0, o0.MarginTop, 0, 0);
                        break;

                    case 1:
                        o1             = new Omino(new Thickness(0, o1.MarginTop, 0, 0), 50);
                        p_1.Visibility = Visibility.Hidden;
                        p_1.Margin     = new Thickness(0, o1.MarginTop, 0, 0);
                        break;

                    case 2:
                        o2             = new Omino(new Thickness(0, o2.MarginTop, 0, 0), 50);
                        p_2.Visibility = Visibility.Hidden;
                        p_2.Margin     = new Thickness(0, o2.MarginTop, 0, 0);
                        break;

                    case 3:
                        o3             = new Omino(new Thickness(0, o3.MarginTop, 0, 0), 50);
                        p_3.Visibility = Visibility.Hidden;
                        p_3.Margin     = new Thickness(0, o3.MarginTop, 0, 0);
                        break;

                    case 4:
                        o4             = new Omino(new Thickness(0, o4.MarginTop, 0, 0), 50);
                        p_4.Visibility = Visibility.Hidden;
                        p_4.Margin     = new Thickness(0, o4.MarginTop, 0, 0);
                        break;
                    }
                }
                if (pScese > 0)
                {
                    Thread tr = new Thread(new ThreadStart(Scendi0));
                    switch (Ascensore.Piano)
                    {
                    case 0:
                        tr = new Thread(new ThreadStart(Scendi0));
                        break;

                    case 1:
                        tr = new Thread(new ThreadStart(Scendi1));
                        break;

                    case 2:
                        tr = new Thread(new ThreadStart(Scendi2));
                        break;

                    case 3:
                        tr = new Thread(new ThreadStart(Scendi3));
                        break;

                    case 4:
                        tr = new Thread(new ThreadStart(Scendi4));
                        break;
                    }
                    //MessageBox.Show("anima");
                    tr.Start();
                }
                t                     = grdAscensore.Margin;
                lbl4.Content          = Ascensore.Piani[4].NPersone;
                lbl3.Content          = Ascensore.Piani[3].NPersone;
                lbl2.Content          = Ascensore.Piani[2].NPersone;
                lbl1.Content          = Ascensore.Piani[1].NPersone;
                lbl0.Content          = Ascensore.Piani[0].NPersone;
                lblNumPersone.Content = Ascensore.Persone;
            }));

            while (true)
            {
                //MessageBox.Show(Ascensore.Count().ToString());
                if (Ascensore.Count() > 0 && (!Ascensore.AspettaPrenotazione || Ascensore.Persone == 0))
                {
                    try
                    {
                        string x = "";
                        foreach (int n in Ascensore.Fila)
                        {
                            x += n + ", ";
                        }
                        //MessageBox.Show(x);
                        Destinazione = Ascensore.Vai();
                        MuoviAscensore();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("errore");
                    }
                }
                Thread.Sleep(20);
            }
        }