- 博客(125)
- 收藏
- 关注
原创 WPF 多值转换器
多值转换器(MultiValueConverter)其实就是普通的“升级版”。它专门用来解决**“多个后台数据共同决定一个界面属性”**的场景。在 WPF 中,它的实现依赖于接口和标签。
2026-05-20 23:11:43
234
原创 WPF 转换器
在 WPF 的数据绑定中,(值转换器)扮演着**“翻译官”数据类型不匹配显示格式不一致**的问题。比如:后台有一个bool类型的属性表示“是否保存”,但界面上的按钮需要的是Visibility(可见/隐藏);或者后台是一个DateTime时间,界面只想显示“yyyy-MM-dd”格式的字符串。这时候就需要用到。
2026-05-20 23:00:59
202
原创 WPF Border
在 WPF(Windows Presentation Foundation)中,Border是一个非常基础且实用的装饰控件。它的核心作用就是。简单来说,它就像是一个“画框”或“容器”,你可以把文字、按钮或者其他布局面板放进去,给它们加上漂亮的边框和底色。以下是Border。
2026-05-16 21:25:24
304
原创 C# WIFI连接状态检测方法
检测方法可靠性速度说明ping⭐ 低快ARP缓存影响,不可靠⭐⭐⭐ 高快检查OperationalStatus,较可靠WMI查询⭐⭐⭐⭐ 很高中检查NetEnabled标志,最准确获取SSID⭐⭐⭐⭐⭐ 最高中直接查询连接的热点名称,最直接。
2026-05-12 19:05:20
205
原创 C语言 文件
在C语言中,文件是实现的核心手段。程序运行时产生的数据默认存放在内存中,一旦程序结束,这些数据就会丢失。通过文件操作,我们可以将数据保存到硬盘上,以便长期存储和重复使用。C语言通过标准库<stdio.h>中定义的一系列函数和FILE结构体来管理文件操作。
2026-05-03 22:40:00
386
原创 C语言 动态内存管理
stdlib.h>“你申请的每一块内存,都必须亲手归还。掌握malloccallocrealloc和free的正确使用,是编写健壮、高效 C 程序的基础。务必养成良好的内存管理习惯,避免常见陷阱。如需进一步了解内存布局(栈 vs 堆)、内存对齐或高级技巧(如内存池),可继续提问!
2026-04-28 21:53:54
385
原创 C语言 联合
int i;float f;上述代码定义了一个名为Data的联合体,包含三个成员:整型i、浮点型f和字符数组str。联合体是 C 语言中一种高效利用内存的工具,适用于需要在不同类型间复用同一内存区域的场景。虽然使用需谨慎,但在底层开发、嵌入式系统和性能敏感代码中非常实用。
2026-04-27 21:27:43
218
原创 C语言 函数指针
函数在内存中也有固定的存储地址(即函数的入口地址)函数指针就是存储这个地址的“容器”通过函数指针可以间接调用函数,甚至动态切换调用的函数运行时动态调用函数的能力解耦代码,提高模块化程度实现回调机制和事件驱动编程构建通用算法(如排序、搜索)实现状态机和插件系统掌握函数指针是成为 C 语言高级开发者的必经之路!
2026-04-21 23:22:54
341
原创 反射创建对象实例的两种方式
追求便捷,低频使用:如果你的场景是偶尔创建一次对象,对性能不敏感,那么 Activator.CreateInstance是更简单直接的选择。追求性能,高频使用:如果你需要在循环中或框架底层频繁创建对象,ConstructorInfo.Invoke配合缓存是绝对的首选方案。这是构建高性能依赖注入(DI)容器、ORM 框架等场景下的标准做法。
2026-04-20 16:15:22
200
原创 C语言 基础问题整理
在 VS Code 中,默认情况下每个.c文件是独立编译的,这是因为其默认配置通常只编译当前活动的文件。要将多个.c文件“合成一个整体”进行编译和运行,核心是修改项目的构建配置文件tasks.json。这里有两种主流方法,推荐使用第一种,它更简单快捷。
2026-04-12 17:57:13
189
原创 C语言 整形提升及算数转换
在表达式中,任何比int类型更小的整型(如charshortbool等),在参与运算前会被自动提升为int或。提高 CPU 运算效率(ALU 通常以int长度为单位操作)避免低精度运算导致数据丢失特性整型提升(Integer Promotion)算术转换(Arithmetic Conversion)触发时机表达式中出现< int的整型两个不同类型的操作数参与运算作用对象单个操作数(提升自身)两个操作数(统一类型)目的保证最小运算精度(至少int使运算双方类型一致是否依赖对方类型否是典型类型。
2026-04-11 20:29:12
445
原创 C语言 迭代和递归
迭代是工程师的思维:一步步推演,稳扎稳打,省资源。递归是数学家的思维:大事化小,小到极致再回归,代码美但费资源。建议:初学者先掌握迭代,理解循环逻辑;遇到树形结构或复杂算法时,再学习递归,并时刻警惕栈溢出。在实际工程中,如果能用简单的迭代解决,通常优先选迭代。
2026-03-24 17:04:36
365
原创 C语言 Static的用法
修饰对象位置默认行为 (无 static)加上static后的变化核心目的局部变量函数内栈分配,函数结束销毁静态存储区,程序结束才销毁,值保留记忆状态全局变量文件顶全局可见 (可被 extern)仅当前文件可见(隐藏)隔离命名空间函数文件顶全局可见 (可被调用)仅当前文件可见(隐藏)封装私有逻辑。
2026-03-21 10:48:00
391
原创 软件闪退处理流程
软件“闪退”(Crash)是软件开发和运维中最棘手的问题之一,因为它通常意味着进程非正常终止,用户来不及看到错误提示。在光伏逆变器监控、数据采集或上位机软件中,闪退可能导致数据丢失或监控中断,后果严重。。
2026-03-17 13:24:18
433
原创 WPF DataContext详解及用例
从技术定义上讲,是和类的一个依赖属性。类型object(它可以是任何 .NET 对象)。作用:它为控件及其子控件提供一个默认的数据源。核心机制属性继承 (Property Inheritance)。特性描述本质一个依附于的object类型依赖属性。核心能力继承性:子元素自动继承父元素的 DataContext,形成数据作用域链。MVVM 角色View 通过 DataContext 持有 ViewModel 实例,实现 UI 与逻辑的解耦。最佳实践。
2026-03-14 17:02:45
705
原创 WPF Dispatcher和DispatcherObject
特性WinFormsWPF基类跨线程检查默认开启 (.NET 2.0+),但可以通过关闭(不推荐)。强制开启,无法关闭。必须遵守规则。调度器(每个控件都有)(通过Dispatcher对象)典型写法或灵活性相对宽松,有时跨线程赋值不报错(但会导致随机崩溃)。极其严格,一旦违规立即报错,强迫开发者写出线程安全的代码。是 WPF 控件的“保镖”,它确保只有“主人”(UI 线程)能碰它,别人碰就报警(抛异常)。Dispatcher是“传话筒”。后台线程想跟控件说话,必须把话交给Dispatcher。
2026-03-14 16:04:02
459
原创 Winform之SuspendLayout的作用
目的:优化性能,避免界面闪烁。机制:阻止系统在批量修改控件属性时频繁触发重绘。配对:必须随后调用才能让界面正常显示更新后的布局。
2026-03-13 10:22:01
217
原创 Winform resx文件介绍
Form1.resx就是 WinForms 窗体的"素材库代码 (.cs)负责逻辑(点击后做什么)。设计器代码 (.Designer.cs)负责骨架(控件在哪里,多大)。资源文件 (.resx)负责皮肉(控件上显示什么字,什么图)。如果你需要做中英文切换的软件,这个文件及其衍生的语言文件(如)将是关键。
2026-03-07 11:34:11
431
原创 I/O密集型 CPU密集型
类型定义瓶颈所在I/O 密集型程序大部分时间在等待输入/输出操作完成(如磁盘读写、网络请求、数据库查询)I/O 设备速度(硬盘、网卡)或远程服务响应时间CPU 密集型程序大部分时间在进行计算(如数学运算、图像处理、加密解密、复杂算法)CPU 计算能力(主频、核心数)✅简单判断如果你的程序经常“卡住”等网络/文件 →I/O 密集型;如果你的程序让 CPU 占用率飙到 100% →CPU 密集型。维度I/O 密集型CPU 密集型瓶颈I/O 速度(磁盘/网络)CPU 计算能力CPU 使用率。
2026-02-17 19:17:45
606
原创 Jquery总结
jQuery是一个快速、小巧、功能丰富的JavaScript 库。它封装了原生 JavaScript 中复杂、冗长的 DOM 操作、事件处理、动画、Ajax 等功能,使得开发者可以用更简洁、一致的语法跨浏览器地操作网页。“Write less, do more.”(写得更少,做得更多)首次发布:2006 年,由 John Resig 创建当前主流版本1.x:兼容 IE6~8(已停止维护)2.x:不支持 IE6~83.x:现代浏览器(推荐使用),支持 Promise、模块化等新特性。
2026-01-24 17:12:56
1084
原创 WPF路由事件作用
路由事件的核心价值在于:让事件“流动起来”,打破单一控件的事件边界,使 UI 树结构中的任意层级都能参与事件处理,从而实现更灵活、高效、可维护的交互逻辑。
2026-01-22 22:50:32
619
原创 CSS 相对定位与绝对定位
相对定位“我在原地,但看起来挪了位置”—— 用于微调或作为定位上下文;绝对定位“我飞出去了,贴在某个容器的某个角落”—— 用于精确覆盖和悬浮布局。两者经常配合使用:父元素,子元素,这是前端布局的经典组合!
2025-12-29 16:15:46
905
原创 C# params使用
是一种灵活接收多个接口类型的写法。常用于反射、依赖注入、AOP、插件架构等需要动态处理类型的场景。调用简洁,但需注意null、性能和类型安全。它让 API 更友好:用户无需手动构造数组。
2025-12-15 17:45:45
644
原创 C# 反射
优点缺点高度灵活,支持运行时动态行为性能开销大实现通用框架(如 DI、AOP、序列化)代码可读性降低支持插件、脚本扩展容易引发运行时异常(如拼写错误)可用于调试、测试工具不支持 AOT 编译(如 Native AOT)的部分场景✅建议:仅在必要时使用反射,并做好异常处理(如等)。
2025-12-15 17:18:42
398
原创 WPF SynchronizationContext的使用
关键点说明作用提供跨线程调度到原始上下文(如 UI 线程)的通用机制核心方法Post(异步)、Send(同步,慎用)典型用途安全更新 UI、实现线程亲和性、单元测试模拟现代替代自动处理上下文恢复,减少手动调度需求设计哲学抽象线程模型,使代码与具体 UI 框架解耦💡一句话理解就像一张“返回原始线程的车票”——你在 UI 线程“买票”(保存Current),之后无论身在哪个线程,都能凭票“坐车回去”执行代码。
2025-12-12 10:19:57
593
原创 C# Activator详解
特性说明用途运行时动态创建对象核心方法优点灵活,支持任意类型缺点性能低,易出错最佳实践仅用于低频场景;高频场景用表达式树或泛型约束💡建议:在写 DI 容器、框架或插件系统时,初期可用Activator快速验证逻辑,后期替换为高性能方案。
2025-12-08 13:37:11
765
原创 C# ConcurrentDictionary详解
是 .NET 中一个线程安全的字典集合,专为高并发读写场景设计。它是 命名空间下的核心类型之一,适用于多线程环境中需要高效、安全地共享键值对数据的场景。普通 不是线程安全的。如果多个线程同时读写:即使加锁()也能实现线程安全,但会带来性能瓶颈(串行化访问)。而 :2. 基本操作(线程安全)3. 高级原子操作(⭐ 最常用!)✅ ✅ ⚖️ 四、与加锁 的性能对比场景高并发读所有读需排队(慢)几乎无锁(快)低并发写串行写(中等)分段锁(较快)
2025-12-08 08:49:02
766
原创 手写简单的IOC容器
Transient,SingletonT Resolve定义接口IContainer+ 生命周期枚举设计注册模型实现注册方法:支持泛型、自绑定实现解析逻辑:递归解析构造函数依赖管理单例缓存测试验证逐步扩展解耦对象创建与使用,由容器负责依赖组装。
2025-12-06 13:54:49
363
原创 C# Thread和Task的区别
类型所在命名空间简介Thread表示操作系统级别的线程,直接映射到一个 OS 线程(1:1 模型)。Task表示一个异步操作,是 .NET 线程池之上的高级抽象,属于的核心。特性ThreadTask抽象层次低(OS 级)高(库级)资源开销高低返回值不支持支持(Task<T>异常处理危险安全取消机制不安全(Abort已弃用)安全(组合能力无强大(WhenAllWhenAny等)async/await 支持❌✅线程池集成❌✅推荐使用场景。
2025-12-04 17:33:26
1242
原创 WPF Converter转换器
功能实现方式单值转换多值转换参数传递双向绑定同时实现Convert和Converter 是 WPF 数据绑定体系中实现“表现与逻辑分离”的重要桥梁,合理使用能让 UI 更灵活、代码更清晰。
2025-12-04 16:27:12
838
原创 WPF 样式
"FontSize""14""Padding""10,5"</x:Key:可选。有 Key 表示显式样式,需手动引用;无 Key 表示隐式样式,自动应用于所有TargetType类型的控件。TargetType:指定该样式适用的控件类型(如ButtonTextBox强烈建议始终指定,否则无法使用属性简写(如FontSize而非特性说明复用性一套样式应用于多个控件可维护性修改一处,全局更新灵活性支持触发器、模板、继承MVVM 友好无需代码即可实现复杂交互效果💡Style 是 WPF UI 开发的基石。
2025-12-02 15:20:00
1199
原创 WPF Binding Source
方式指定方式适用场景是否需要命名是否支持跨控件是否继承 DataContextSource显式对象(资源、静态等)绑定全局/静态数据❌✅(只要对象可访问)❌通过x:Name引用控件间简单联动✅❌(限同作用域)❌相对位置(自身/祖先/模板父级)模板、样式、自引用❌✅(通过祖先查找)❌(默认)隐式使用当前元素的 DataContextMVVM 主流绑定方式❌✅(通过继承)✅(自动继承)是 MVVM 的基石,适合大多数业务数据绑定;简单直接,适合 UI 控件间交互;
2025-12-02 15:08:39
983
原创 WPF Behavior
}WPF 中的 Behavior 是实现可复用、解耦的 UI 交互逻辑的强大工具。它完美契合 MVVM 架构,让开发者既能保持 ViewModel 的纯净,又能灵活处理复杂的 UI 行为。推荐实践:优先使用+ ICommand;复杂交互才自定义 Behavior。
2025-12-02 14:58:23
1131
原创 WPF 附加属性
某个类可以为其他类“附加”一个属性。例如,Grid.Row是Grid类定义的附加属性,但它被用在ButtonTextBlock等子控件上,用来告诉 Grid 这个子控件应该放在哪一行。声明静态只读字段(DependencyProperty 类型)。注册附加属性(使用提供静态的 Get 和 Set 方法(命名必须为(可选)提供属性更改回调,用于响应值的变化。我们来创建一个名为的附加属性,当设置为true时,目标控件在加载后自动获得焦点。// 注册附加属性:AutoFocus。
2025-11-28 17:07:00
344
原创 WPF 依赖属性与附加属性使用场景选取
自己用,依赖属性;别人用,附加属性。控件自己需要的属性 → 依赖属性。别人(父容器、工具类)需要控制你→ 附加属性。掌握这一点,就能在大多数场景下做出合理选择。
2025-11-28 16:51:48
300
原创 WPF 自定义行为详解
特性说明目的自动滚动DataGrid到最新添加的数据项机制监听的集合变更事件优点解耦 UI 逻辑,可复用,无需修改 ViewModel 或 Code-behind风险虚拟化、批量操作、线程调度可能导致滚动失败建议结合Dispatcher延迟调用 + 使用e.NewItems获取新项这个行为非常适合日志查看器、聊天窗口、实时监控列表等需要“自动到底”的场景。
2025-11-26 19:57:01
923
原创 C# Volatile关键字详解
特性说明作用确保字段的可见性和禁止重排序适用简单的布尔标志、状态开关等不适用复合操作、大对象、非原子类型(如long在 32 位平台)替代优先考虑或锁机制关键点volatile ≠ 线程安全,只是内存模型的一部分📌最佳实践:除非你非常清楚自己在做什么,否则对于多线程共享状态,优先使用lock或,而不是依赖volatile。
2025-11-26 13:33:01
528
原创 C# Lambda 表达式
关键点说明是什么创建匿名函数的简洁语法核心符号=>主要用途初始化委托、LINQ 查询、事件处理、函数式编程优势简洁、支持闭包、类型推断、表达式树最佳实践优先使用ActionFunc+ Lambda,避免匿名方法🌟一句话记住Lambda 表达式让 C# 拥有了“把行为当作数据传递”的能力,是写出优雅、简洁、现代 C# 代码的关键。
2025-11-18 19:51:37
577
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅