• 生产者消费者模式


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

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

    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);
            }
            
        }
    }
  • 相关阅读:
    JSP总结1
    EL总结2-域
    EL总结1
    getRealPath和getContextPath
    mybatis获取参数数值的两个方式
    进程与线程区别与联系
    进程间通信和线程间通信的区别
    STRLEN
    二叉树数据结构和算法
    TYPDEF使用注意部分
  • 原文地址:https://www.cnblogs.com/La5DotNet/p/2733898.html
Copyright © 2020-2023  润新知