- 博客(345)
- 收藏
- 关注
原创 如何让线程休眠 但不阻塞线程
允许 UI 处理点击、重绘等事件,避免卡死。和Thread.Sleep的区别。(适合需要“停止”按钮的场景)。(但不保证 100% 准确)。会引入额外时间开销。,必须等待延时结束。
2025-08-12 15:17:34
193
原创 System.IO.File.AppendAllText()如何使用
是 C# 中用于向文件末尾追加内容的便捷方法。:将文本写入文件末尾(保留原有内容)。:内部自动处理文件打开、写入和关闭。:如果文件不存在,会自动创建。
2025-07-07 13:50:58
291
原创 C#中的BindingList有什么作用?
当集合内容变化(增删改)时,自动触发事件通知绑定控件(如DataGridView、ListBox等)刷新显示。命名空间,主要用于实现数据绑定(Data Binding)场景。:简化UI控件与数据集合的同步,无需手动编写刷新逻辑。在UI线程操作(与所有控件交互一样)。是一个非常重要的集合类,位于。主要面向WinForms设计。:频繁大规模更新时,考虑使用。提供更多细粒度的事件(如。
2025-07-07 13:23:42
387
原创 如何使用序列化和反序列化将对象存储到文件中
这是一个泛型方法,约束T必须是class(引用类型)明确标注BinaryFormatter的安全风险。捕获所有异常(实际项目应记录具体异常信息)从指定路径读取二进制文件并反序列化为对象。建议替代方案(JSON/XML)文件流操作(自动释放资源)文件指针重置(防御性编程)自定义Binder设置。二进制格式化器初始化。返回null表示失败。
2025-07-07 11:04:56
184
原创 如何使用单例模式保证全局唯一实例(复杂版本)
用户管理方法(Add/Delete/Change/Select)所有对单例实例的访问都通过加锁保护。:验证用户凭据并更新登录状态。在构造函数中初始化数据库连接。通过私有构造函数 +方法保证全局唯一实例。属性记录当前登录用户。类封装所有数据库操作。初始状态为"未登录"
2025-07-07 10:14:43
359
原创 C#如何实现中英文快速切换
首先定义一个中英文切换的是 .NET Framework 中的一个类(位于命名空间),。它在 WinForms 应用程序中尤其常见,用于动态加载不同语言的界面资源。
2025-07-05 17:10:15
473
原创 如何使用SunnyUI控件
然后在引用里面可以看见SunnyUI\Bin\net40\SunnyUI.dll,SunnyUI\Bin\net40\SunnyUI.Common.dll,这两个项目的引用。.NET Framework 组件”页面,点击“浏览”,选择SunnyUI\Bin\net40\SunnyUI.dll,点击确定按钮就添加进来了。在工具箱中右键添加选项卡 输入SunnyUI。首先在Nuget中下载图下面的包。点击鼠标右键,选择项。
2025-07-03 13:34:23
336
原创 C#中如何实现应用程序的自检(防止一个应用多次启动)
返回的Process对象包含哪些信息?这个ProcessId(进程 ID,int类型,唯一标识该进程)(进程名称,如"MyApp"MainModule(主模块信息,通常是可执行文件.exe的路径)StartTime(进程启动时间)Threads(该进程的所有线程集合)Handle(进程的 Windows 句柄)(进程优先级)(进程占用的物理内存大小,单位:字节)
2025-07-02 09:40:03
210
原创 C#中 Winform如何实现跨页面调用
设计页面 如下 其中Form2为启动项 当点击订阅消息的时候 会创建Form1页面 当 Form1页面的点击发送的时候 自动将发送的消息同步到label1中。Form2的代码如下。Form1的代码如下。
2025-06-28 00:02:41
219
原创 什么是脉冲当量、细分
步进电机默认以整步(Full Step)运行,例如标准1.8°步距角的电机,每脉冲转动1.8°,运动可能不够平滑(存在振动或噪音)。:通过驱动器对电机电流的精确控制,将1个整步拆分为多个微步(如16细分、64细分等)。:1.8°步距角电机,16细分后,每微步角度=1.8°/16=0.1125°。2.细分不直接提升扭矩,实际精度受机械刚性、负载影响。:驱动器对脉冲的细分处理(如将1脉冲细分为16微步):步进电机的步距角(如1.8°/步)。电机转动更平滑(减少振动和噪音)。:丝杠螺距、齿轮比等。
2025-06-17 15:57:01
411
原创 步进电机或伺服电机的控制中ENA、DIR、PUL分别是啥
例如:步进电机步距角1.8°,则200个脉冲=1圈(360°)。:通常为方波,占空比50%(但驱动器仅检测上升沿或下降沿)。:驱动电机运动的“步进指令”,频率和数量控制速度和位置。时,驱动器禁用电机(电机处于自由状态或刹车状态)。:控制电机的旋转方向(顺时针CW或逆时针CCW)。:受电机和驱动器性能限制(步进电机高频易丢步)。:控制电机的步进角度或伺服电机的位移量。(步进电机)或固定位移量(伺服电机)。:电机的“开关”,控制驱动器是否工作。:控制电机驱动器的开启或关闭。:决定电机转向,需提前设置。
2025-06-13 14:49:11
934
原创 使用WPF的Microsoft.Xaml.Behaviors.Wpf中通用 UI 元素事件
【代码】使用WPF的Microsoft.Xaml.Behaviors.Wpf中通用 UI 元素事件。
2025-06-07 16:30:00
585
原创 ViewModelBase的构建以及为什么要使用[CallerMemberName] string propertyName = null
是 C# 的一个特性(Attribute),它的作用是,并将其作为参数传递进来。
2025-06-05 23:31:56
263
原创 机器视觉图像形态学中的腐蚀、膨胀、开运算、闭运算
腐蚀(Erosion)是一种基本的图像处理操作,主要用于缩小或细化图像中的目标区域。它通过结构元素(Structuring Element)与图像进行交互,逐步消除边界像素,使目标区域向内收缩。对于二值图像 I和结构元素 S,腐蚀操作定义为: I⊖S={x∣Sx⊆I}其中:Sx 表示结构元素 S平移 x后的版本。结果图像中的点 x 满足:当 S 的中心位于 x 时,SS 完全包含于原始图像 I 中。消除细小物体或噪声:移除比结构元素小的孤立点或毛刺。分离粘连区域:使相连的物体断开。平滑边界:使
2025-06-02 13:22:38
1306
原创 VM图像处理之图像二值化
是指将彩色图像转换为仅包含亮度信息(黑白过渡)的单通道图像的过程或结果。灰度图像中每个像素的数值代表该点的明暗程度,而不包含颜色信息。0代表纯黑(最暗)255代表纯白(最亮)中间值为不同深浅的灰色(最常用):(基于人眼对不同颜色的敏感度权重)
2025-06-02 00:45:51
583
原创 C# 看门狗策略实现
(示例中每1秒更新一次),看门狗通过检查心跳时间判断是否存活。(示例10秒)未收到心跳,判定为任务冻结,触发重启。),每次检测后重置,避免并发问题。关键字确保布尔标志的可见性。被监控的任务需定期更新。创建新线程并更新心跳时间戳。
2025-04-10 17:58:50
485
原创 C# 中实现 跨线程写入
若写入操作频率过高,需监控队列长度或添加背压机制。:如网络服务器,处理来自不同客户端的并发更新操作。:由独立线程处理队列中的写入操作,确保顺序执行。:确保多个线程同时触发写入时,不会导致竞态条件。:在写入操作中需捕获异常,避免导致写入线程崩溃。:采集线程持续读取数据,外部线程动态更新配置。:多个工作线程提交写入请求,由中心线程处理。接收来自任意线程的写入请求。控制读取线程的暂停与恢复。时间或使用无等待策略。
2025-03-24 20:02:12
536
原创 C# 中实现一个线程持续读取,另一个线程负责写入,且写入时读取线程暂停
写入线程通过Set()发送暂停请求,读取线程通过Wait()阻塞自身。:读取线程暂停后通过Set()通知写入线程,确保写入操作安全执行。
2025-03-24 17:55:31
500
原创 C#中如何实现读写分离
读写锁适合读多写少场景,写频繁时可能不如普通锁高效。通过每次修改生成新对象实现无锁读取(如使用。:数据库读写分离时需处理主从同步延迟问题。:独占锁,其他所有读写操作都会被阻塞。灵活性较低,仅适用于预定义的集合类型。:确保锁的获取和释放成对出现(用。适用于简单变量的读写分离,通过。需要手动管理锁的获取和释放。直接利用数据库主从复制特性。开箱即用,无需手动管理锁。高性能,适合高频读写场景。频繁修改可能产生内存压力。:允许多个线程同时读取。需要手动处理内存可见性。需要数据库支持主从同步。
2025-03-24 17:44:06
646
原创 上行和下行的区别
上行通常指的是数据从终端设备(例如计算机、手机等)发送到网络或服务器。这种传输方式通常用来发送用户生成的数据,例如上传文件、发送电子邮件、提交表单等。2. 用途不同:上行通常用于发送用户生成的数据,例如上传文件、发送电子邮件等;上行和下行是通信领域中常用的两个术语,用于描述数据或信号在传输过程中的方向。1. 数据流动方向:上行数据流是从源设备流向网络或服务器,下行数据流则是从网络或服务器流向目的设备。3. 数据流的发起方:上行数据由终端设备发起,下行数据由网络或服务器发起。
2025-02-13 10:14:11
1865
原创 使用PyCharm创建项目以及如何注释代码
到这里,我们的第一个 Python 程序已经运转起来了,很酷吧!对了,PyCharm 有一个叫“每日小贴士”的弹窗,会教给你一些使用 PyCharm 的小技巧,如下图所示。如果不需要,直接关闭就可以了;接下来,我们可以在代码窗口编写我们的 Python 代码。写好代码后,可以在窗口中点击鼠标右键,选择“Run”菜单项来运行代码,下面的“Run”窗口会显示代码的执行结果,如下图所示。,在给文件命名时建议使用英文字母和下划线的组合,创建好的 Python 文件会自动打开,进入可编辑的状态。
2025-02-07 14:59:08
693
原创 Python优缺点以及如何安装
Python 语言的优点很多,简单为大家列出几点。,跟其他很多编程语言相比,Python。能用更少的代码做更多的事情,。开放源代码,拥有。,有极强的适应性。,能够黏合其他语言开发的东西。解释型语言,更容易,能够在多种操作系统上运行。Python 最主要的缺点是(解释型语言的通病),如果更看重代码的执行效率,C、C++ 或 Go 可能是你更好的选择。
2025-02-07 09:33:52
1374
原创 C# 中的Stopwatch和timer
Stopwatch:用于测量时间间隔,适合性能分析和精确计时。Timer:用于在指定的时间间隔后执行代码,适合定时任务。根据你的具体需求,可以选择使用Stopwatch来测量时间间隔,或使用Timer来执行定时任务。
2025-01-21 11:49:25
743
原创 ModbusTCP通信常见的问题
1.有些设备是只支持一个设备读取 如果用多个工具同时读取会导致连接中断2.有些设备的读取响应速度很慢 需要Tread.sleep一下(具体时间需要试出来)3.有些设备的40001偏移量不一定0 还有可能是偏移量为400014.modbus使用多线程的读取不会提升读取速度(可以通过提高一次读取数据的长度来提高性能)5.读取过程中如果需要读取3000多个保持寄存器需要分批读取然后组包到ushort数组6.分批读取时 尽量不要将两个连续的寄存器共同组成的一个值分开读取
2025-01-16 11:05:16
345
原创 Fins通信
1、欧姆龙设备PLC:系列 CS系列、CJ系列、CP系列、NX系列(1)微型:CPM1A、CPM2A、CP1H、CP1L(2)小型:CPM2C、CQM1H、CJ1M(3)中型:C200H、CJ1、CS1(4)大型:CV、CS1D(5)运动控制器:NJ、NX等2、存储区分类CIO: I/O继电器区DM:数据区-WR:工作区,内部继电器-HR:保持继电器-AR:是模拟通道-C:计数器-T:定时器。
2025-01-14 16:44:12
417
原创 System.IO.FileNotFoundException:“未能加载文件或程序集“System.RuntimeXXXX 的原因
出现原因是因为。
2025-01-14 11:19:59
1503
2
配置好的maven文件
2024-05-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人