专业编程基础技术教程

网站首页 > 基础教程 正文

C# 队列生产消费

ccvgpt 2024-08-18 14:26:56 基础教程 19 ℃

使用Queue+时钟完成一个简单的生产消费操作。

这个例子中生产者每500毫秒生产一个数据,消费者每2000毫秒使用一个数据

C# 队列生产消费

 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();
        }

Tags:

最近发表
标签列表