线程间通信的同步机制(ConcurrentQueue)

假设需要实现的功能:

创建两个线程,一个用来读取数据,一个用来更新数据。

使用 ConcurrentQueue 来存放读取到的数据,然后使用 TryTake 或者 TryDequeue 来判断队列是否有新数据,如果有则更新 UI。

csharp 复制代码
private readonly ConcurrentQueue<string> _dataQueue = new ConcurrentQueue<string>();

private void DataReadingThread()
{
    while (true)
    {
        string data = ReadData();
        if (!_dataQueue.Contains(data))
        {
            _dataQueue.Enqueue(data);
        }
    }
}

private void UIUpdateThread()
{
    while (true)
    {
        if (_dataQueue.TryDequeue(out string newData))
        {
            Dispatcher.Invoke(() =>
            {
                // 更新UI元素
                // myLabel.Content = newData;
            });
        }
    }
}

注意:

队列的原则是先进先出

读取数据的线程是一直往队列中存放数据的,为了保证更新的数据是最新的数据,更新UI的频率需要高于读取数据的频率,否则就会出现队列堆积数据,导致UI数据更新不及时的问题。

相关推荐
用户298698530141 小时前
无需安装 Excel,也能轻松将 CSV 转为 XLS 或 XLSX
后端·c#·excel
在世修行1 小时前
从零打造 C# 工业视觉检测系统(五):相机连接、连续取流与双路实时预览
数码相机·c#·视觉检测
JckOLF04Z1 小时前
C#客户端的异步操作
开发语言·c#
曹牧2 小时前
C#:注释嵌套
开发语言·c#
LccKyI2 小时前
C# 零基础学习 Day01|基础概念梳理 + 思维导图总结
开发语言·笔记·学习·c#
雪隐18 小时前
WPF + MVVM 实战系列01-一个老狗回炉重造 WPF 的 12 天血泪史
sqlite·c#·mvvm
在世修行20 小时前
从零打造 C# 工业视觉检测系统(四):海康威视 MVS SDK 入门与相机枚举实战
数码相机·c#·视觉检测
神秘的MT20 小时前
C# WinForm Socket 服务器 + 串口转发
服务器·网络·学习·c#
czhc11400756631 天前
8.4:今日概念与语法总结
c#
大数据张老师1 天前
Typora 导出 Word 模版操作手册
开发语言·c#·word·typora