c#如何重新构造线程程序 问题

c#如何重新构造线程程序 问题,c#,multithreading,C#,Multithreading,我有一个恒定的数据包流。每次传入一个新包时(间隔100毫秒),都会弹出一个事件,我将包发送给一个类来处理数据并将其可视化。不幸的是,如果在处理当前包之前发送了新包,则包的处理可能会中止 我现在有什么 是用作其他程序的dll的代码。 当我开始编写dll时,我对c#还不熟悉,所以我不想做得太复杂。一切正常,但如果cpu非常忙,我会遇到一些丑陋的帧跳过(在我的可视化部分) 我有几个班,其中一个班负责处理所有的包裹。这个类大约有50个属性、25个函数和1000行代码。计算只需要6个函数。 其余部分是正确

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

我现在有什么 是用作其他程序的dll的代码。 当我开始编写dll时,我对c#还不熟悉,所以我不想做得太复杂。一切正常,但如果cpu非常忙,我会遇到一些丑陋的帧跳过(在我的可视化部分)

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

我需要改变什么 所以现在我想使用一个列表来缓冲所有传入的数据。 该列表应由另一个线程处理。因此,将数据写入列表所需时间不太可能超过100 ms^^(2个数组,每个数组包含约40个元素,每个元素应等于零)

我在想什么 将提到的类拆分为两个独立的类。 一个处理包,一个处理设置。所以我将用户和“程序”输入分开。 创建使用“包处理”类处理缓冲数据的线程

我不知道的是什么
由于设置类包含处理类所需的重要属性,我不知道如何做到最好,因为处理类还需要更改/填充设置类中的缓冲区。但是这个将由主线程调用。还是最好不要分割设置和处理类,让它保持原样?我不太熟悉线程,阅读了这本免费电子书的第一章,我只想添加一个队列并实现一个线程来进行处理。这将有助于您跳过,并且只需要很少的更改。通过分离设置来重构代码似乎是一项没有什么好处的工作,而且可能会出现新的bug

添加队列

  • 创建ConcurrentQueue(这是线程安全后进先出,这是您所需要的)

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

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

某人所依赖的是家庭作业、个人教育还是实际代码?答案会有很大的不同(例如,对于以后的情况,您可能不希望完全涉及线程,因为10个事件/秒的速度很慢,对于单线程程序应该很好,除非每个事件的数据量以100K+为单位)。不要使用列表。看看ConcurrentQueueu。很抱歉花了这么长时间,但我们开了个会。实际上是为了工作。这是一个用于开发的工具。我只是个小实习生^^你分班的理由不清楚或无效。使用线程不一定和设置有任何关系。在设置中,我访问标签和图片框并更改它们。因此,我需要编写委托,以便允许我通过另一个线程更改它们。我不想让它太复杂。如果你有充分的理由用另一种方式做这件事,我将感谢你的帮助;)好的,那么我试试这个,不要把现有的类拆分成两个新类。
     cq.Enqueue(newPacket);
     if (cq.TryDequeue(out newPacket)) 
     { 
        // Visualize new packet
     }