Advertisement
Guest User

Untitled

a guest
Mar 30th, 2020
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.98 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Threading;
  4. using System.Threading.Tasks;
  5. using System.Windows;
  6. using System.Windows.Controls;
  7. using System.Windows.Media;
  8.  
  9. namespace Ospedale
  10. {
  11.     /// <summary>
  12.     /// Logica di interazione per MainWindow.xaml
  13.     /// </summary>
  14.     public partial class MainWindow : Window
  15.     {
  16.         SortedSet<string> lista = new SortedSet<string>();
  17.  
  18.         static readonly Object locker = new object();
  19.  
  20.         static SemaphoreSlim semaforoPazienti = new SemaphoreSlim(0);
  21.  
  22.         Random rand = new Random();
  23.  
  24.         const int MAXTicket = 20;
  25.         static int numProgrTicket = 0;
  26.         static int[] ID = new int[6];
  27.  
  28.         public MainWindow()
  29.         {
  30.             InitializeComponent();
  31.             Inizializza();
  32.             Task.Factory.StartNew(() => AvviaSportello(borderSport1, tbSport1));
  33.             Task.Factory.StartNew(() => AvviaSportello(borderSport2, tbSport2));
  34.             Task.Factory.StartNew(() => AvviaSportello(borderSport3, tbSport3));
  35.         }
  36.  
  37.         private void AvviaSportello(Border border, TextBlock textBlock)
  38.         {
  39.             while (true)
  40.             {
  41.                 string stringa;
  42.                 int sleep;
  43.                 semaforoPazienti.Wait();
  44.                 lock (locker)
  45.                 {
  46.                     stringa = lista.Min;
  47.                     lista.Remove(stringa);
  48.                     sleep = rand.Next(4000, 8000 + 1);
  49.                 }
  50.                 Dispatcher.Invoke(() =>
  51.                 {
  52.                     border.Background = new SolidColorBrush(Colors.Orange);
  53.                     textBlock.Text = stringa;
  54.                 });
  55.                 Thread.Sleep(1000);
  56.  
  57.                 bool trovato = false;
  58.                 int indexLista = 0;
  59.  
  60.                 Dispatcher.Invoke(() =>
  61.                 {
  62.                     while (!trovato && indexLista < lstbPrenotazioni.Items.Count)
  63.                     {
  64.                         string s = lstbPrenotazioni.Items.GetItemAt(indexLista).ToString();
  65.                         if (s.Contains(stringa))
  66.                         {
  67.                             lstbPrenotazioni.Items.Remove(s);
  68.                             lstbPrenotazioni.Items.Insert(indexLista, s + " (in lavorazione)");
  69.                             trovato = !trovato;
  70.                         }
  71.                         else
  72.                         {
  73.                             indexLista++;
  74.                         }
  75.                     }
  76.                 });
  77.  
  78.                 Dispatcher.Invoke(() =>
  79.                 {
  80.                     border.Background = new SolidColorBrush(Colors.Yellow);
  81.                 });
  82.  
  83.                 Thread.Sleep(sleep);
  84.                
  85.                 Dispatcher.Invoke(() =>
  86.                 {
  87.                     string stringaLista = lstbPrenotazioni.Items.GetItemAt(indexLista).ToString();
  88.                     lstbPrenotazioni.Items.Remove(stringaLista);
  89.                     stringaLista = stringaLista.Replace(" (in lavorazione)", "");
  90.                     lstbPrenotazioni.Items.Insert(indexLista, string.Format("{0} (completato)", stringaLista));
  91.                 });
  92.             }
  93.         }
  94.  
  95.         private void Inizializza()
  96.         {
  97.             Dispatcher.Invoke(() =>
  98.             {
  99.                 Abutton.IsEnabled = true;
  100.                 Bbutton.IsEnabled = true;
  101.                 Cbutton.IsEnabled = true;
  102.                 Dbutton.IsEnabled = true;
  103.                 Ebutton.IsEnabled = true;
  104.                 Fbutton.IsEnabled = true;
  105.                 button.IsEnabled = false;
  106.                 lstbPrenotazioni.Items.Clear();
  107.  
  108.                 tbSport1.Text = "---";
  109.                 tbSport2.Text = "---";
  110.                 tbSport3.Text = "---";
  111.  
  112.             });
  113.             for(int i = 0; i < ID.Length; i++)
  114.             {
  115.                 ID[i] = 0;
  116.             }
  117.             numProgrTicket = 0;
  118.             lista.Clear();
  119.         }
  120.  
  121.         private void Abutton_Click(object sender, RoutedEventArgs e)
  122.         {
  123.             Genera('A');
  124.         }
  125.         private void Bbutton_Click(object sender, RoutedEventArgs e)
  126.         {
  127.             Genera('B');
  128.         }
  129.         private void Cbutton_Click(object sender, RoutedEventArgs e)
  130.         {
  131.             Genera('C');
  132.         }
  133.         private void Dbutton_Click(object sender, RoutedEventArgs e)
  134.         {
  135.             Genera('D');
  136.         }
  137.         private void Ebutton_Click(object sender, RoutedEventArgs e)
  138.         {
  139.             Genera('E');
  140.         }
  141.         private void Fbutton_Click(object sender, RoutedEventArgs e)
  142.         {
  143.             Genera('F');
  144.         }
  145.  
  146.         private void Genera(char lettera)
  147.         {
  148.             if (numProgrTicket < MAXTicket)
  149.             {
  150.                 int posID = lettera - 'A';
  151.                 string ticketFormato;
  152.                 int IDTicket;
  153.                 lock (locker)
  154.                 {
  155.                     IDTicket = ++ID[posID];
  156.                     ticketFormato = string.Format("{0}{1:D2}", lettera, IDTicket);
  157.                     numProgrTicket++;
  158.                     lista.Add(ticketFormato);
  159.                     Dispatcher.Invoke(() =>
  160.                     {
  161.                         lstbPrenotazioni.Items.Add(string.Format("{0}. {1}", numProgrTicket, ticketFormato));
  162.                     });
  163.                     semaforoPazienti.Release();
  164.                 }
  165.             }
  166.             else
  167.             {
  168.                 Dispatcher.Invoke(() =>
  169.                 {
  170.                     Abutton.IsEnabled = false;
  171.                     Bbutton.IsEnabled = false;
  172.                     Cbutton.IsEnabled = false;
  173.                     Dbutton.IsEnabled = false;
  174.                     Ebutton.IsEnabled = false;
  175.                     Fbutton.IsEnabled = false;
  176.                     button.IsEnabled = true;
  177.                 });
  178.             }
  179.         }
  180.  
  181.         private void button_Click(object sender, RoutedEventArgs e)
  182.         {
  183.             Inizializza();
  184.         }
  185.     }
  186. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement