线程间通信的同步机制(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数据更新不及时的问题。

相关推荐
.房东的猫2 小时前
ERP(金蝶云星空)开发【安装篇】
c#
fie888910 小时前
基于C#的推箱子小游戏实现
开发语言·c#
.房东的猫10 小时前
ERP(金蝶云星空)开发【业务数据中心创建和注册】
c#
bugcome_com11 小时前
C# 进阶核心知识点汇总|多项目开发 + 委托 + Lambda + 事件一次吃透
c#
SunflowerCoder13 小时前
基于插件化 + Scriban 模板引擎的高效 HTTP 协议中心设计
http·c#
青云计划16 小时前
知光项目用户关系模块
c#·linq
m5655bj16 小时前
使用 C# 修改 PDF 页面尺寸
java·pdf·c#
专注VB编程开发20年17 小时前
c#模仿内置 Socket.Receive(无需 out/ref,直接写回数据)
开发语言·c#
bugcome_com17 小时前
【零基础入门】C# 核心教程:从 HelloWorld 到入门精髓
c#
JQLvopkk17 小时前
C# 实现Http Json格式 Post 、Get 方法请求 winform服务器
http·c#·json