自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

愿你历尽千帆,归来仍是少年。

莫忘少年凌云志,曾许天下第一流。

  • 博客(345)
  • 收藏
  • 关注

原创 使用互斥体确保程序只能运行一个实例并且实现全局异常处理

【代码】使用互斥体确保程序只能运行一个实例并且实现全局异常处理。

2025-08-26 16:44:50 400

原创 WinForm中的PropertyGrid如何使用

【代码】WinForm中的PropertyGrid如何使用。

2025-08-18 10:06:49 267

原创 如何让线程休眠 但不阻塞线程

允许 UI 处理点击、重绘等事件,避免卡死。和Thread.Sleep的区别。(适合需要“停止”按钮的场景)。(但不保证 100% 准确)。会引入额外时间开销。,必须等待延时结束。

2025-08-12 15:17:34 193

原创 如何使用EF框架操作Sqlite

【代码】如何使用EF框架操作Sqlite。

2025-08-04 16:35:22 286

原创 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#中,可以不实例化一个类而直接调用其静态字段

这是因为。这是静态成员的核心特性。

2025-07-06 18:16:06 429

原创 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

原创 机器视觉中图像增强的几种方式

2025-06-06 10:28:15 163

原创 ViewModelBase的构建以及为什么要使用[CallerMemberName] string propertyName = null

是 C# 的一个特性(Attribute),它的作用是,并将其作为参数传递进来。

2025-06-05 23:31:56 263

原创 MVVMbinding事件

binding事件前需要的实现的接口ICommand。

2025-06-05 00:00:18 152

原创 Winfrom中常用的控件简称

btn Buttonlbl Labelpnl Panel。

2025-06-03 09:17:44 268

原创 机器视觉图像处理之图像滤波

均值滤波是一种基本的线性图像滤波方法,主要用于图像平滑和噪声去除。

2025-06-02 14:38:45 475

原创 机器视觉图像形态学中的腐蚀、膨胀、开运算、闭运算

腐蚀(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

原创 UDP读取数据

【代码】UDP读取数据。

2025-04-12 17:30:25 234 1

原创 将多个自定义协议转到Modbus同一个端口下不同的站地址下面

【代码】将多个自定义协议转到Modbus同一个端口下不同的站地址下面。

2025-04-12 11:36:20 262

原创 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

原创 C#中Interlocked.Exchange的作用

在 C# 中,是一个用于的关键方法,其核心作用是。

2025-03-24 16:14:54 520

原创 如何写一个modbusSlave(用于自定义协议转modbus)

【代码】如何写一个modbusSlave(用于自定义协议转modbus)

2025-03-22 10:51:09 188

原创 C#中的字典怎么使用?

如果使用自定义类型作为键,需要确保该类型正确实现了。

2025-02-28 10:01:30 661

原创 上行和下行的区别

上行通常指的是数据从终端设备(例如计算机、手机等)发送到网络或服务器。这种传输方式通常用来发送用户生成的数据,例如上传文件、发送电子邮件、提交表单等。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

原创 如何通过NMudbus读取寄存器数据

2.一定要记得下载NModbus包 否则会导致引用DLL不全(因为自定义类库中引用了NModbus)

2025-01-14 11:14:12 554

配置好的maven文件

里面已经建好建立好了仓库,在setting也已经创建完成。只需要将maven环境到bin目录配置,然后打开即可,里面的maven本地仓库已经下好了部分资源,首次加载较快

2024-05-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除