Ampelsimulation

Das folgende Programm simuliert eine Verkehrsampel.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;   //Für Thread.Sleep(int milliseconds);
 
namespace _08Ampel
{
    public partial class Form1 : Form
    {
        Graphics gObject;
        Brush brush;
        Pen pen;
        int status = 0;
 
        public void InitAmpel()
        {
            gObject.Clear(Color.Black);
            pen = new Pen(Color.White, 2);
            gObject.DrawEllipse(pen, 20, 20, 80, 80);
            gObject.DrawEllipse(pen, 20, 120, 80, 80);
            gObject.DrawEllipse(pen, 20, 220, 80, 80);
        }
 
        public void greenblink()
        {
            for(int i=0;i<4;i++)
            {
                //Schwarz 500 ms
                gObject.FillEllipse(new SolidBrush(Color.Black), 21, 221, 78, 78);
                Thread.Sleep(500);
                // Grün 500 ms
                gObject.FillEllipse(new SolidBrush(Color.Green), 21, 221, 78, 78);
                Thread.Sleep(500);
            }
        }
 
        public Form1()
        {
            InitializeComponent();
 
            gObject = canvas.CreateGraphics();
 
        }
 
        private void Form1_Shown(object sender, EventArgs e)
        {
            InitAmpel();
        }
 
        private void bt_red_Click(object sender, EventArgs e)
        {
            InitAmpel();
            brush = new SolidBrush(Color.Red);
            gObject.FillEllipse(brush, 21, 21, 78, 78);
            status = 1;
 
        }
 
        private void bt_redyellow_Click(object sender, EventArgs e)
        {
            InitAmpel();
            brush = new SolidBrush(Color.Red);
            gObject.FillEllipse(brush, 21, 21, 78, 78);
            brush = new SolidBrush(Color.Yellow);
            gObject.FillEllipse(brush, 21, 121, 78, 78);
            status = 2;
        }
 
        private void bt_green_Click(object sender, EventArgs e)
        {
            InitAmpel();
            brush = new SolidBrush(Color.Green);
            gObject.FillEllipse(brush, 21, 221, 78, 78);
            status = 3;
        }
 
        private void bt_yellow_Click(object sender, EventArgs e)
        {
            InitAmpel();
            brush = new SolidBrush(Color.Yellow);
            gObject.FillEllipse(brush, 21, 121, 78, 78);
            status = 0;
        }
 
        private void bt_continue_Click(object sender, EventArgs e)
        {
            switch(status)
            {
                case 0: bt_red.PerformClick();break;
                case 1: bt_redyellow.PerformClick(); break;
                case 2: bt_green.PerformClick(); break;
                case 3: greenblink(); bt_yellow.PerformClick(); break;
 
            }
        }
    }
}