⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form1.cs

📁 好东西操作系统的作业 大家来分享啊 啊 啊啊啊
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Collections;

namespace ThreadState
{
    public partial class Form1 : Form
    {
        /// <summary>
        /// 创建产品线程
        /// </summary>
        private Thread addBigThread;
        /// <summary>
        /// 创建产品线程
        /// </summary>
        private Thread addSmallThread;
        /// <summary>
        /// 消费产品线程
        /// </summary>
        private Thread useThread;
        /// <summary>
        /// 结束标志
        /// </summary>
        private bool end;
        /// <summary>
        /// 产品池
        /// </summary>
        private ArrayList productPool;
        /// <summary>
        /// 刷新数据
        /// </summary>
        private Thread refreshThread;

        public Form1()
        {
            InitializeComponent();
        }


        private void AddBig()
        {
            while (!end)
            {
                if (productPool.Count < 40)
                {
                    Product big = new Product("媛儿是大猪");
                    productPool.Add(big);
                    for (int i = 0; i < 500000000; i++)
                    {
                        int j = 0;
                    }
                }
                else
                {
                    Thread.Sleep(1000);
                }
                Invoke(new DisplayNumberEvent(DisplayNumber));
                //Thread.Sleep(2000)
            }
        }

        private void AddSmall()
        {
            while (!end)
            {
                if (productPool.Count < 40)
                {
                    Product small = new Product("媛儿是小猪");
                    productPool.Add(small);
                    for (int i = 0; i < 500000000; i++)
                    {
                        int j = 0;
                    }
                }
                else
                {
                    Thread.Sleep(1000);
                }

                Invoke(new DisplayNumberEvent(DisplayNumber));
                //Thread.Sleep(2000);
            }
        }

        private void UseProduct()
        {
            while (!end)
            {
                if (productPool.Count > 0)
                {
                    Product current = productPool[0] as Product;
                    Invoke(new DisplayInfoEvent(DisplayInfo));
                    productPool.Remove(current);
                    for (int i = 0; i < 500000000; i++)
                    {
                        int j = 0;
                    }
                }
                else
                {
                    Invoke(new DisplayNullEvent(DisplayNull));
                    Thread.Sleep(1000);
                }
                Invoke(new DisplayNumberEvent(DisplayNumber));
                //Thread.Sleep(1000);
            }
        }

        private delegate void DisplayNumberEvent();

        private void DisplayNumber()
        {
            textBox7.Text = productPool.Count.ToString();
        }

        private delegate void DisplayInfoEvent();

        private void DisplayInfo()
        {
            textBox8.Text = ((Product)productPool[0]).Value;
            textBox9.Text = ((Product)productPool[0]).Time.ToString();
        }

        private delegate void DisplayNullEvent();

        private void DisplayNull()
        {
            textBox8.Text = "现在没有猪";
            textBox9.Text = "现在没有猪";
        }


        private delegate void DisplayThreadStateEvent();

        private void DisplayThreadState()
        {
            switch (addBigThread.ThreadState)
            {
                case System.Threading.ThreadState.Running:
                    textBox1.Text = "就绪";
                    break;
                case System.Threading.ThreadState.Suspended:
                    textBox1.Text = "挂起";
                    break;
                case System.Threading.ThreadState.WaitSleepJoin:
                    textBox1.Text = "阻塞";
                    break;
                default:
                    break;
            }
            switch (addSmallThread.ThreadState)
            {
                case System.Threading.ThreadState.Running:
                    textBox3.Text = "就绪";
                    break;
                case System.Threading.ThreadState.Suspended:
                    textBox3.Text = "挂起";
                    break;
                case System.Threading.ThreadState.WaitSleepJoin:
                    textBox3.Text = "阻塞";
                    break;
                default:
                    break;
            }
            switch (useThread.ThreadState)
            {
                case System.Threading.ThreadState.Running:
                    textBox5.Text = "就绪";
                    break;
                case System.Threading.ThreadState.Suspended:
                    textBox5.Text = "挂起";
                    break;
                case System.Threading.ThreadState.WaitSleepJoin:
                    textBox5.Text = "阻塞";
                    break;
                default:
                    break;
            }
            lock (textBox2)
            {
                textBox2.Text = addBigThread.ThreadState.ToString();
            }
            lock (textBox4)
            {
                textBox4.Text = addSmallThread.ThreadState.ToString();
            }
            lock (textBox6)
            {
                textBox6.Text = useThread.ThreadState.ToString();
            }
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            end = true;
            if (addBigThread.ThreadState == System.Threading.ThreadState.Suspended)
            {
                addBigThread.Resume();
            }
            addBigThread.Abort();
            if (addSmallThread.ThreadState == System.Threading.ThreadState.Suspended)
            {
                addSmallThread.Resume();
            }
            addSmallThread.Abort();
            if (useThread.ThreadState == System.Threading.ThreadState.Suspended)
            {
                useThread.Resume();
            }
            useThread.Abort();
            refreshThread.Abort();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            addBigThread.Suspend();
            button1.Enabled = false;
            button2.Enabled = true;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            addBigThread.Resume();
            button1.Enabled = true;
            button2.Enabled = false;
        }

        private void button4_Click(object sender, EventArgs e)
        {
            addSmallThread.Suspend();
            button4.Enabled = false;
            button3.Enabled = true;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            addSmallThread.Resume();
            button4.Enabled = true;
            button3.Enabled = false;
        }

        private void button6_Click(object sender, EventArgs e)
        {
            useThread.Suspend();
            button6.Enabled = false;
            button5.Enabled = true;
        }

        private void button5_Click(object sender, EventArgs e)
        {
            useThread.Resume();
            button6.Enabled = true;
            button5.Enabled = false;
        }

        private void button7_Click(object sender, EventArgs e)
        {
            end = false;
            productPool = new ArrayList();
            addBigThread = new Thread(AddBig);
            addSmallThread = new Thread(AddSmall);
            useThread = new Thread(UseProduct);
            refreshThread = new Thread(RefreshData);
            addBigThread.Start();
            addSmallThread.Start();
            useThread.Start();
            refreshThread.Start();
            button7.Enabled = false;
            button8.Enabled = true;
            button1.Enabled = true;
            button4.Enabled = true;
            button6.Enabled = true;
            button2.Enabled = false;
            button3.Enabled = false;
            button5.Enabled = false;
        }

        private void button8_Click(object sender, EventArgs e)
        {
            end = true;
            if (addBigThread.ThreadState == System.Threading.ThreadState.Suspended)
            {
                addBigThread.Resume();
            }
            addBigThread.Abort();
            if (addSmallThread.ThreadState == System.Threading.ThreadState.Suspended)
            {
                addSmallThread.Resume();
            }
            addSmallThread.Abort();
            if (useThread.ThreadState == System.Threading.ThreadState.Suspended)
            {
                useThread.Resume();
            }
            useThread.Abort();
            refreshThread.Abort();
            textBox1.Text = string.Empty;
            textBox2.Text = string.Empty;
            textBox3.Text = string.Empty;
            textBox4.Text = string.Empty;
            textBox5.Text = string.Empty;
            textBox6.Text = string.Empty;
            textBox7.Text = string.Empty;
            textBox8.Text = string.Empty;
            textBox9.Text = string.Empty;
            button7.Enabled = true;
            button8.Enabled = false;
            button1.Enabled = false;
            button4.Enabled = false;
            button6.Enabled = false;
            button2.Enabled = false;
            button3.Enabled = false;
            button5.Enabled = false;
        }

        private void RefreshData()
        {
            while (!end)
            {
                Invoke(new DisplayThreadStateEvent(DisplayThreadState));
                Thread.Sleep(50);
            }
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -