使用Queue+时钟完成一个简单的生产消费操作。
这个例子中生产者每500毫秒生产一个数据,消费者每2000毫秒使用一个数据
Queue<int> q = new Queue<int>();
System.Timers.Timer timerProducter = new System.Timers.Timer();
System.Timers.Timer timerConsumer = new System.Timers.Timer();
public FrmMain()
{
InitializeComponent();
timerProducter.Interval = 500;
timerConsumer.Interval = 2000;
timerProducter.Elapsed += TimerProducter_Elapsed;
timerConsumer.Elapsed += TimerConsumer_Elapsed;
}
private void TimerConsumer_Elapsed(object? sender, System.Timers.ElapsedEventArgs e)
{
Task.Factory.StartNew(() =>
{
if (q.Count == 0)
{
return;
}
int i = q.Dequeue();
lstConsumer.Invoke(() =>
{
lstConsumer.Items.Add(i);
});
});
}
private void TimerProducter_Elapsed(object? sender, System.Timers.ElapsedEventArgs e)
{
Task.Factory.StartNew(() =>
{
if (q.Count > 5)
{
return;
}
int i = new Random().Next(1, 999);
q.Enqueue(i);
lstProducter.Invoke(() =>
{
lstProducter.Items.Add(i);
});
});
}
private void btnStart_Click(object sender, EventArgs e)
{
timerProducter.Start();
timerConsumer.Start();
}