加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c#如何重构我的程序以进行线程化

发布时间:2020-12-15 17:28:46 所属栏目:百科 来源:网络整理
导读:问题 我有一个不断的数据包流.每次传入新包(间隔为100毫秒)时,都会弹出一个事件,我将包发送到一个类来处理数据并将其可视化.不幸的是,如果在处理当前程序包之前发送了新程序包,则可能会中止程序包的进程. 我现在有什么 是一个用作另一个程序的DLL的代码. 当
问题

我有一个不断的数据包流.每次传入新包(间隔为100毫秒)时,都会弹出一个事件,我将包发送到一个类来处理数据并将其可视化.不幸的是,如果在处理当前程序包之前发送了新程序包,则可能会中止程序包的进程.

我现在有什么

是一个用作另一个程序的DLL的代码.
当我开始编写dll时,我是c#的新手,所以我不想太复杂.一切正常,但如果cpu非常忙,我会遇到一些丑陋的Frame跳过(在我的可视化部分).

我有几个类,其中一个是处理所有包.这个类有50个属性,25个函数和1000行代码.计算只需要6个函数.
其余的是正确设置属性(如果用户更改设置).

我需要改变什么

所以现在我想使用List来缓冲所有传入的数据.
该列表应由另一个线程处理.因此,将数据写入列表的时间不可能超过100毫秒^^(2个数组,每个数据大约40个,应该等于什么都没有)

我有什么想法

将提到的类拆分为2个单独的类.
一个处理包,另一个处理设置.所以我会拆分用户和“程序”输入.
创建一个使用“包处理”类来处理缓冲数据的线程.

我什么都不知道

由于设置类包含处理类所需的重要属性,因此我不知道如何做到最好,因为处理类还需要更改/填充设置类中的缓冲区.但是这个将由主线程调用.或者最好不拆分设置和处理类并保持原样?我不熟悉线程并阅读这本免费电子书Threading in C#的第一章

解决方法

我只是添加一个队列并实现一个线程进行处理.这将有助于您跳过并且几乎不需要更改.通过拆分设置来重构代码似乎是很多工作,几乎没有什么好处和可能的新bug.

添加队列;

>创建一个ConcurrentQueue(这是线程安全的lifo,这是你需要的)

var cq=new ConcurrentQueue<Packets>();

>将所有数据包添加到该队列

cq.Enqueue(newPacket);

>创建另一个循环并处理队列的线程

if (cq.TryDequeue(out newPacket)) 
     { 
        // Visualize new packet
     }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读