生产者消费者模式

简介:在一个场景中,可能由一个模块来负责生产数据,另一个模块来消费。
这里用一个非常简单的程序来进行模拟这种场景。下面的这个图片是界面

在第一个文本框中填入数据后,点击“生产数据”按扭,数据就生产完了,然后另一个线程不断地去数据池中查看有没有新的数据,如果有就消费掉。
下面看后台的代码

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;

namespace 生产都消费者
{
    public partial class Form1 : Form
    {
        public List<String> list = new List<string>();
        delegate void DelThread(string str);
        DelThread myDelThread;

        public Form1()
        {
            InitializeComponent();
            myDelThread = new DelThread(ShowString);
            Thread th = new Thread(XiaoFei);
            th.IsBackground = true;
            th.Start();

        }

        /// <summary>
        /// 生产数据
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            list.Add(textBox1.Text);
        }

        /// <summary>
        /// 另一个线程不断地去查看是否有新的数据产生
        /// </summary>
        private void XiaoFei()
        {
            while (true)
            {
                foreach (string s in list.ToArray())
                {
                    
                    textBox2.Invoke(myDelThread,s);
                }

                Thread.Sleep(3000);
            }
        }

        /// <summary>
        /// 把消费掉的数据显示到第二个文本框,并且从list中移除。
        /// </summary>
        /// <param name="str"></param>
        private void ShowString(string str)
        {
            textBox2.Text += str + "\r\n";
            list.Remove(str);
        }
        
    }
}
原文地址:https://www.cnblogs.com/La5DotNet/p/2733898.html