简介:在一个场景中,可能由一个模块来负责生产数据,另一个模块来消费。
这里用一个非常简单的程序来进行模拟这种场景。下面的这个图片是界面
在第一个文本框中填入数据后,点击“生产数据”按扭,数据就生产完了,然后另一个线程不断地去数据池中查看有没有新的数据,如果有就消费掉。
下面看后台的代码
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); } } }