📄 form1.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 + -