예제 #1
0
        private void BTN_Start_Click(object sender, EventArgs e)
        {
            BTN_Start.Enabled     = false;
            BTN_Exit.Enabled      = true;
            BTN_NewClient.Enabled = true;

            WorkerBarber.RunWorkerAsync();
        }
예제 #2
0
        private void BTN_NewClient_Click(object sender, EventArgs e)
        {
            queue();

            if (WorkerBarber.IsBusy != true)
            {
                WorkerBarber.RunWorkerAsync();
            }
        }
예제 #3
0
        private void BTN_Exit_Click(object sender, EventArgs e)
        {
            WorkerBarber.CancelAsync();
            WorkerQueue.CancelAsync();

            BTN_Start.Enabled     = true;
            BTN_Exit.Enabled      = false;
            BTN_NewClient.Enabled = false;
        }
예제 #4
0
        private void barberStartWorking()
        {
            if (nClients > 0)
            {
                WorkerBarber.ReportProgress(1);
                dequeue();

                int haircutDuration = randomInt.Next(haircutMinDuration, haircutMaxDuration);
                Thread.Sleep(haircutDuration);
            }
            else
            {
                WorkerBarber.ReportProgress(0);
            }
        }
예제 #5
0
        private void WorkerBarber_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            // 0 for Idle, 1 for Bussy
            int  workerState = e.ProgressPercentage;
            bool idle        = true;

            switch (workerState)
            {
            case 0: idle = true; WorkerBarber.CancelAsync(); break;

            case 1: idle = false; break;

            default: break;
            }

            changeBarberState(idle);
            updateVisualChairs(nClients);
        }