第一套代码将producer Consumer的逻辑写到from类里了,方便在demo的显示界面动态显示模拟生产和消费的过程。
第二套代码将producer Consumer的逻辑单独写到一个类中,使用委托的方法在from中回显生产消费的过程。
Demo中均以3个线程作为消费者,1个线程作为生产者为例。
由于是C#新手,有不对的地方望不吝赐教。
第二套代码将producer Consumer的逻辑单独写到一个类中,使用委托的方法在from中回显生产消费的过程。
Demo中均以3个线程作为消费者,1个线程作为生产者为例。
由于是C#新手,有不对的地方望不吝赐教。
先贴下窗口截图,动态生产消费进度显示
第一套代码:
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Windows.Forms;
- using System.Threading;
- namespace ProducerConsumerDemo
- {
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- }
- private void button1_Click(object sender, EventArgs e)
- {
- StopFlag = false;
- StartDemo();
- }
- private void button2_Click(object sender, EventArgs e)
- {
- StopFlag = true;
- }
- public class TaskInfo
- {
- public int Index;
- public TaskInfo()
- {
- }
- public TaskInfo(int index)
- {
- this.Index = index;
- }
- }
- private static bool StopFlag = false;
- private int ProducerNumber = 1;
- private int ConsumerNumber = 3;
- // 共用任务队列
- private Queue<TaskInfo> TaskQueue = new Queue<TaskInfo>();
- private Semaphore TaskSemaphore = new Semaphore(0, 256);
- private object myLock = new object();
- private void StartDemo()
- {
- StartProducer(ProducerNumber);
- Thread.Sleep(2000);
- StartConsumer(ConsumerNumber);
- }
- private void StartProducer(int num)
- {
- for (