C# 发布-订阅模式

前言 发布-订阅者模式,可以使代码解耦、易于扩展。这个模式要用委托和事件。 什么时候应该使用 发布-订阅者模式 呢?场景如下: 草原上有 A、B 两只动物,有一只饥肠辘辘的狮子来到了草原上。如果狮子发现了 A,那 A 就要赶紧跑,B 可以继续猫着;如果狮子发现了 B,那 B 就要跑路,A 可以猫着;如果狮子把 A、B 都看到了,那 A、B 都得跑,谁知道狮子中意追哪个呢;如果狮子谁都没看见,那 A、B 都猫着。 你会发现这个简单的例子用个 if…else 语句就搞定了: if(狮子发 […]

代码模块化的正确姿势

很不要面子的说,我之前写程序,都是在一个 cs 文件里写。一个代码八千行、打包后大小接近 10MB 的 winform 程序, cs 文件只有一个。。。 你要是问我这么长的 cs 文件怎么看,不好意思,我用 #region #endregion 把不同功能的代码折叠了起来,这个时候你肯定想丢给我一个表情包   后来软件功能越来越多,cs 越来越长,自己也开始吃不消了。加上一些定制需求,好多定制软件只有部分代码不一样,每次定制都要复制粘贴好多代码,为了确保正确每次都要看一遍所有代码,效率 […]

Random 类的一个有趣现象

前言 前两天在写“随机报数机”的时候,用到了 Random 类,来生成随机数,发现一个现象:有时候 Random 类出来的数字连着好几次都是一样的,我就在想,这个数字到底是不是“随机”生成的,于是做了一个小实验。 实验 代码思路:新建一个线程,线程无线循环,每循环一次,由 Random 类生成一个随机数,根据随机数的值,让与数值对应的 panel 控件向上移动一个单位,就形成了类似于柱状图实时统计的效果。 这个时候,Random random = new Random();  这句代码,放在不同 […]

串口数据被“拆包”问题

前言 写串口助手、上位机等与串口打交道的程序的时候,可能会遇到这么一个问题:串口数据“被“拆包”(“粘包”也是一样的原因)。 这种情况多发生在使用“串口转 USB ”线材的时候,我猜测与转换芯片或者硬件电路之类的有很大的关系。 因为用同一个串口助手软件,“ RS485/232 转 USB ”的线材会导致数据被“拆包”,而“ TTL 转 USB ”的线材则不会(我的实验现象)。 “拆包”现象如下图所示,下位机一次性向串口发送了 10 个字节的数据,但是串口助手(或者上位机)却分两次接收,实际上是读 […]

Powered by WordPress | Theme Revised from Doo

苏ICP备18047621号

Copyright © 2017-2024 追光者博客