- 博客(410)
- 资源 (5)
- 收藏
- 关注
原创 【C#笔记】Newtonsoft.Json 中 `[JsonIgnore]` 的作用详解
关键点说明特性名称所属库作用忽略属性的序列化和反序列化典型场景隐藏敏感字段、避免循环引用、跳过临时变量替代方案等✅当你不想让某个属性出现在 JSON 中时,加上,它就会“消失得无影无踪”。
2025-11-11 13:57:09
412
原创 【prism】Prism导航会重新初始化视图?一文讲清楚!
Prism框架在WPF应用中的导航默认会重新初始化视图,每次调用RequestNavigate都会创建新的View和ViewModel实例。本文解析了Prism的默认导航行为,验证了视图重建现象,并提供了三种复用界面的方法:通过IRegionMemberLifetime接口、XAML声明或自定义缓存逻辑。文章对比了不同方式的特性差异,建议根据页面使用频率和资源开销选择适合的复用策略,帮助开发者更好地控制Prism应用的导航性能和内存管理。
2025-11-11 10:10:40
30
原创 【yolo】一次 YOLOv8 升级 YOLOv11 后 ONNX 模型无法运行的排查记录
摘要:升级YOLOv8至v11后,ONNX模型无法运行的问题源于ONNX算子集(opset)与ONNX Runtime版本不兼容。YOLOv11默认使用更高opset导出,旧版Runtime不支持导致加载失败。临时方案是强制指定opset=21导出,但彻底解决需升级ONNX Runtime至新版(如1.23.0+),以支持新算子和opset。核心结论:模型opset必须与推理框架支持范围匹配,建议优先升级Runtime而非降级opset,确保长期兼容性。(149字)
2025-11-10 14:39:10
300
原创 【C#】何时用ref?
在 C# 编程中,`ref` 是一个看似简单却容易被误解的关键字。很多初学者会疑惑:“既然引用类型已经是指针了,为什么还要用 `ref`?” 本文将带你深入理解 `ref` 的本质、适用场景以及常见误区,帮助你在正确的时间做出正确的选择。
2025-11-09 11:02:30
539
原创 【C#】三种写法,告诉你 await 什么时候不能省
本文通过三种写法对比,讲解了异步编程中await关键字的使用时机:1) 直接在Task.Run中写异步Lambda时可省略await;2) 调用异步方法时若忘记await会导致Task<Task>嵌套问题;3) 调用异步方法时加上await才是正确做法。核心结论是:直接写异步Lambda时await可省,但调用异步方法时必须显式await才能确保完整等待。文章通过编译器原理和类型分析,揭示了不同写法背后的行为差异。
2025-10-30 21:04:50
605
2
原创 【C#】Channel<T>: .NET 中的异步生产者-消费者模型详解
摘要:本文详细介绍了 .NET 中的 Channel异步生产者-消费者模型,对比传统 BlockingCollection
2025-10-29 20:19:34
1223
4
原创 【Yolo】Yolo实操7点建议(多个项目经验总结,训练图片累计超过2万张)
Yolo实操7点建议(多个项目经验总结,训练图片累计超过2万张)
2025-10-23 08:59:10
365
8
原创 【C#】C# 中 Task 异常的“包裹”问题与 Try-Catch 实践
C# 中 Task 异常处理的核心问题在于 Task.Wait() 会将异常包裹为 AggregateException,而 await 会直接抛出原始异常。文章通过实际项目案例,分析了当使用 BlockingCollection 和 Task.Run 组合时,OperationCanceledException 和 InvalidOperationException 被意外包裹的问题。作者提供了两种解决方案:改用 await 代替 Wait(),或在 Task 内部捕获特定异常。此外还探讨了 Aggreg
2025-09-26 01:00:00
984
2
原创 【C#】以 BlockingCollection 为核心的多相机 YOLO 检测任务处理框架
本文提出了一种基于BlockingCollection的多相机YOLO检测任务处理框架,适用于工业视觉中多相机并行检测场景。该框架通过将相机回调线程与检测任务解耦,使用BlockingCollection作为线程安全的任务队列,有效解决了多线程抢占、触发丢帧和内存泄漏等问题。相比ConcurrentQueue/Bag,BlockingCollection提供了阻塞消费、容量限制和优雅结束等特性。核心实现包括:回调线程仅负责图像入队、后台线程循环消费任务执行YOLO检测、通过Dispatcher安全更新UI。
2025-09-25 17:11:16
856
1
原创 【yolo】YOLO 训练新图片时,是否需要和旧数据一起训练?
要保留旧知识,就必须用旧数据。只要新知识,就可以只用新数据。指定预训练模型只是指定了起点,赋了一个初始值而已
2025-09-25 11:51:17
339
2
原创 【halcon】新版 HALCON 中 `flush_graphic` 的正确打开方式
HALCON 新版图形刷新机制解析 摘要: 从 HALCON 13 开始,传统图形刷新控制方法 SetSystem("flush_graphic", "false") 已被弃用。新版推荐使用窗口级控制方案:SetWindowParam("flush", "false") 关闭自动刷新,绘图完成后必须调用 FlushBuffer() 强制刷新,否则图形不会显示。本文详细解析了新旧方法差异,并提供了 C# 多线程环境下的最佳实践,包
2025-09-23 16:06:12
524
6
原创 【yolo】YOLO 训练的两个隐藏坑:类别顺序影响收敛 + cache 文件不刷新
在最近的 YOLO 训练实验中,我踩了两个隐藏的坑,影响了训练效果和实验结论:1. 修改类别顺序后,训练收敛速度和最终性能居然有差异2. 修改了类别顺序却发现训练结果完全没变,最后才发现是 cache 文件惹的祸这篇文章把两个问题梳理总结,希望能帮到同样遇到困惑的朋友。
2025-09-22 15:35:36
684
2
原创 【C#】C# 调用 Python 脚本正确姿势:解决 WaitForExit 死锁与退出检测问题
最近在做一个工具,需要在 C# 里调用嵌入的 Python 脚本,把 YOLO 的 ONNX 模型转成别的格式。脚本执行完全没问题,但我一直收不到 `Process.Exited` 事件,甚至直接 `WaitForExit()` 会卡死,界面永远不会提示“执行完成”。
2025-09-20 17:37:25
404
4
原创 【C#】C# 中 `ProcessStartInfo` 详解:启动外部进程
在 C# 开发中,我们经常需要调用外部程序或命令行工具,比如运行 Python 脚本、执行 CMD 命令、启动可执行文件(.exe)、调用 Git、FFmpeg、YOLO 等工具。这时,`.NET` 提供的 `Process` 和 `ProcessStartInfo` 类就是我们的“万能钥匙”。
2025-09-20 14:45:02
1486
2
原创 【yolo】YOLOv8模型导出完全指南:从PT到ONNX及其他格式的完整实践
摘要:本文全面介绍了YOLOv8模型从PT格式导出为ONNX等部署格式的完整流程与最佳实践。重点解析了关键参数(如format、imgsz、simplify)的作用机制,特别强调输入尺寸imgsz会自动继承训练尺寸的特性,并提供了ONNX、TensorRT等格式的典型导出配置方案。文章还总结了常见问题解决办法,推荐使用simplify优化模型性能,同时分享了通过C#实现模型重命名的实用技巧。最后指出"训练决定能力,导出定义接口"的核心原则,帮助开发者高效完成模型部署转换。
2025-09-20 11:46:15
1548
原创 【yolo】YOLOv8中 model=‘xxx.pt‘ 和 pretrained=‘xxx.pt‘ 到底有什么区别?一文讲透!
YOLOv8中 `model='xxx.pt'` 和 `pretrained='xxx.pt'` 到底有什么区别?一文讲透!
2025-09-19 10:18:35
931
原创 WPF 拖拽(Drag & Drop)完全指南:从入门到精通
WPF 拖拽(Drag & Drop)核心实现指南 本文介绍了WPF中实现拖拽功能的两个关键事件: PreviewDragOver(隧道事件) 在拖动过程中持续触发 用于数据验证和视觉反馈 通过设置e.Effects决定允许的操作类型 Drop(冒泡事件) 在释放鼠标时触发一次 执行实际的拖放业务逻辑 需要配合PreviewDragOver使用 实战示例展示了如何实现可拖拽排序的ListBox: 通过处理鼠标事件启动拖拽 使用DataObject封装拖拽数据 在Drop事件中完成项目位置交换 关键点
2025-09-18 21:11:29
1023
2
原创 【wpf】从 DataContext 到依赖属性:WPF 自定义控件 ImageView 的优化之路
本文总结了WPF自定义控件ImageView的优化过程。最初版本直接使用DataContext绑定GraphicInfo对象,但存在数据冲突、可读性差等问题。通过优化为定义Graphic依赖属性,实现了数据绑定解耦,支持在ItemsControl中使用ItemTemplate绑定整个对象("{Binding}")。最终控件变得更健壮、可扩展,能优雅处理批量场景,同时保持MVVM模式。文章建议在WPF自定义控件开发中优先使用依赖属性而非直接依赖DataContext。
2025-09-15 15:04:53
747
5
原创 【Halcon 】Halcon 裁剪尺寸的像素陷阱全解析:为什么要 -0.5,为什么要 -1,而圆却不用?
本文解析了Halcon中ROI裁剪时常见的尺寸偏差问题。在Halcon中,像素坐标以中心点定义,导致几何矩形(如gen_rectangle2)需要将长度减0.5来对齐像素格,避免生成513x513的意外结果;而基于像素索引的HDrawingObject.RECTANGLE1则需要将右下角坐标减1来抵消内部转换偏移。相比之下,圆形(gen_circle)由于边界不对齐像素格,无需修正。理解这些差异能有效避免裁剪尺寸的常见错误。
2025-09-10 17:05:17
907
6
原创 WPF/Prism 中计算属性的通知机制详解 —— SetProperty 与 RaisePropertyChanged
WPF/Prism中计算属性更新的关键点:当属性依赖其他属性时,需在依赖项变更时手动触发计算属性的通知。文章对比了经典INotifyPropertyChanged实现和Prism的SetProperty/RaisePropertyChanged方法,重点说明后者能更简洁地处理属性更新。特别指出当计算属性依赖嵌套对象属性时,需将属性提升到外层或在嵌套对象中实现属性变更通知,才能确保UI正确刷新。提供了处理计算属性依赖关系的实用解决方案。
2025-09-09 21:26:21
795
4
原创 【git】Git 大文件推送失败问题及解决方案
本文介绍了Git推送大文件失败的解决方案。当单个文件超过平台限制(如100MB)时,直接删除文件无效,必须使用git filter-repo工具从历史记录中彻底移除大文件。操作步骤包括新克隆仓库、执行删除命令和强制推送。为避免此类问题,建议提前配置.gitignore忽略二进制文件等大文件,或使用Git LFS/网盘存储大文件。核心建议:源代码放Git,大文件放Release/网盘分开管理。
2025-09-09 20:03:01
550
原创 【yolo】YOLOv8 训练模型参数与多机环境差异总结
本文总结了YOLOv8训练过程中的常见问题及解决方案:1) model参数支持YAML、PT文件或已有训练结果三种形式;2) pretrained参数控制是否加载预训练权重;3) 训练效果差异主要源于随机性、硬件配置和环境差异;4) 离线环境需手动拷贝权重文件;5) 预训练模型在小数据集上表现通常优于从头训练。文章还提供了参数使用对照表,帮助用户避免训练中的常见问题。
2025-09-05 15:49:57
1273
5
原创 【SuperSocket 】SuperSocket 中自定义 Session
SuperSocket框架允许通过自定义Session扩展客户端连接管理。开发者可以继承默认的AppSession类,添加业务属性(如用户ID、状态数据)并重写连接事件方法。通过实现ISessionFactory接口并注册到DI容器,框架会使用自定义Session类创建新连接。这种设计使开发者能够集中管理在线会话,实现广播、点对点通信等功能,同时将网络通信与业务逻辑分离。关键步骤包括继承AppSession、实现Session工厂、以及正确注册服务。
2025-09-04 22:13:25
549
1
原创 理解 C# `async` 的本质:从同步包装到状态机
C# 中 async/await 的本质是编译器生成状态机,而非自动实现异步。本文通过对比两种写法:Task.FromResult 直接包装同步结果为 Task,以及 async 方法自动包装返回值并可能使用 await Task.Delay(0) 占位,揭示了关键区别:async 允许直接返回原始值由编译器自动转换为 Task,但不会自动释放线程或实现异步操作,真正的异步需要依赖底层 I/O 或 Task 操作。实际开发中应根据场景选择合适方式 - 同步包装用 Task.FromResult,真正异步用
2025-09-04 21:22:18
1066
2
原创 【SuperSocket 】利用 TaskCompletionSource 在 SuperSocket 中实现跨模块异步处理客户端消息
把回调变成了异步等待,这个真的是太酷啦~~~~~~~
2025-09-04 19:57:29
1026
2
原创 SuperSocket 动态协议服务端开发全解析
SuperSocket动态协议服务端开发指南 本文介绍了使用SuperSocket框架开发支持多种协议类型的TCP服务端。SuperSocket是一个基于.NET的高性能可扩展Socket框架,支持多种协议处理方式。文章详细讲解了如何通过PipelineFilter实现Terminator和FixedHeader两种协议解析,并设计了一个可配置的过滤器工厂(ConfigurableFilterFactory),使服务端能够动态选择协议类型。核心内容包括消息包定义(StringPackageInfo)、自定义
2025-09-04 19:11:49
1101
7
原创 【wpf】WPF开发避坑指南:单例模式中依赖注入导致XAML设计器崩溃的解决方案
WPF开发避坑指南:单例模式中依赖注入导致XAML设计器崩溃 在WPF开发中,单例类构造函数使用依赖注入会导致XAML设计器崩溃(显示"对象引用未设置"错误),但程序运行时正常。这是因为设计器环境下不会初始化DI容器。解决方案: 使用DesignerProperties.GetIsInDesignMode判断设计时环境,跳过依赖解析 采用延迟解析策略,在属性访问时再获取依赖 为设计器提供模拟数据类 推荐方案:在单例构造函数中加入设计时判断: if(DesignerProperties.G
2025-09-03 14:47:44
1093
原创 【wpf】WPF 自定义控件绑定数据对象的最佳实践
本文总结了 WPF 自定义控件绑定数据对象的最佳实践。通过 ImageView 控件案例,比较了直接使用 DataContext 和定义依赖属性两种方式:前者简单但易冲突,后者更清晰且支持列表场景。推荐在控件需要独立 DataContext 或列表使用时采用依赖属性模式,如定义 Graphic 属性并处理绑定回调,这样既能解耦数据视图,又能在 ListBox 等场景中自然使用。文章最后给出了两种方式的适用场景建议。
2025-09-03 14:44:42
571
2
原创 【Halcon】HALCON 图形性能优化:SetSystem(“flush_graphic“, ...)
HALCON机器视觉开发中,图形窗口频繁刷新会导致界面闪烁和性能下降。通过SetSystem("flush_graphic", "false")关闭自动刷新,可让绘图指令缓存后批量执行,最后用SetSystem("flush_graphic", "true")一次性刷新显示。这种优化技巧能有效消除闪烁,提升程序运行效率,建议成对使用并控制好作用范围。合理运用该参数可显著改善视觉应用的用户体验和性能表现。
2025-09-03 09:25:47
400
原创 视觉引导机械手双夹爪抓取:偏心旋转补偿与逆运动学求解
本文针对视觉引导机械手抓取中夹具偏心导致的旋转偏移问题,提出两种解决方案:三步补偿法和一步逆运动学法。核心挑战在于机械手旋转时夹具会绕旋转中心做圆周运动,导致原本对准的点发生偏移。通过数学推导得出补偿公式,当夹具相对旋转中心偏移为(dX,dY)时,机械手应移动至[Xc-(dX·cosθ-dY·sinθ),Yc-(dX·sinθ+dY·cosθ)]并旋转θ角度,即可实现一步精准抓取。文中对比了两种方法的优劣,并提供了可直接调用的C#封装函数,适用于工业自动化场景中高精度抓取需求。
2025-09-01 21:19:55
1038
1
原创 【WPF】WPF 自定义控件实战:从零打造一个可复用的 StatusIconTextButton (含避坑指南)
本文介绍了如何从零开始开发一个可复用的WPF自定义控件StatusIconTextButton,重点讲解了WPF自定义控件的核心实现机制和最佳实践。文章首先分析了传统开发方式的问题,如代码重复、无法统一管理等,提出了通过继承Control类创建可复用控件的解决方案。随后详细解析了WPF的Themes/Generic.xaml默认样式约定机制,并提供了完整的代码实现步骤,包括控件类的创建和默认模板的定义。该控件支持在线状态反馈、MaterialDesign图标、命令绑定等功能,同时遵循模板化设计,便于扩展和样
2025-08-29 16:20:16
1165
4
原创 【C#】获取不重复的编码(递增,非GUID)
本文探讨了在软件开发中为新对象分配唯一编码的优化方法。以C#通信设备管理系统为例,针对原始实现中存在的冗余变量、嵌套遍历等问题,提出两种优化方案:1)使用LINQ的Any()方法简化逻辑,适用于中小数据量场景;2)利用哈希集合的O(1)查找特性提升大数据量下的性能。文章对比了不同方案的适用场景和复杂度,并提供了通用实现代码,同时建议根据数据规模和并发需求选择合适方案,还讨论了编码起始值、步长调整等扩展场景。
2025-08-27 16:14:19
1067
2
原创 【prism】Prism 弹窗在 ViewModel 中控制大小的实践总结
本文介绍了在WPF中使用Prism框架时,通过ViewModel动态控制弹窗窗口大小的方法。通过利用DataContext关联,可以在ViewModel中找到并修改当前对话框的尺寸。文章提供了两种实现方式:直接在OnDialogOpened中设置固定大小,或通过DialogParameters动态传递尺寸参数。这种方案无需额外定制DialogWindow,实现简单且维护方便,是Prism弹窗大小控制的实用解决方案。
2025-08-26 20:13:38
578
6
原创 【wpf】WPF 实战:通过附加属性为 Grid 动态添加行列
摘要:本文介绍了一种使用WPF附加属性动态生成Grid行列的解决方案。传统Grid布局需要手动定义行列,无法直接绑定ViewModel数据。通过创建GridHelpers静态类,定义Rows和Columns两个附加属性,实现了Grid行列数的动态绑定和自动更新。这种方法完美支持MVVM模式,使布局能根据ViewModel属性值变化自动调整,适用于分屏应用等需要动态切换布局的场景。文章提供了完整的实现代码和MVVM应用示例,展示了如何使Grid布局真正实现数据驱动。
2025-08-26 10:49:32
823
原创 【Prism】Prism.DryIoc 对话框中使用 Region 的完整指南
本文介绍了在WPF+Prism框架下实现插件化对话框的完整解决方案。通过分析Prism.DryIoc中对话框Region失效的问题,提出使用Scoped RegionManager的优化方法。具体实现包括:创建独立的RegionManager实例、绑定到对话框窗口、在OnDialogOpened中进行导航等步骤。这种方法相比之前的Prism.Unity方案更简洁通用,成功解决了对话框中动态加载子视图的问题,实现了View的插件化切换功能。文章提供了完整的代码示例和关键点说明,为类似场景提供了可靠的技术参考。
2025-08-25 15:19:38
526
3
原创 【halcon】Halcon 开发笔记: gray_histo_abs 报错陷阱
Halcon使用中,区域(Region)与轮廓(Contour/XLD)转换时存在一个容易被忽视的陷阱。
2025-08-19 14:21:09
376
5
原创 【wpf】WPF 中的 MouseBinding 详解
这篇文章详细介绍了WPF中的MouseBinding功能及其在MVVM模式下的应用。主要内容包括:1) MouseBinding的定义,它可将鼠标手势与命令直接绑定;2) 常用MouseGesture配置,包括各种鼠标按键与修饰键组合;3) MouseBinding的使用位置,如控件、窗口或DataTemplate中;4) 通过ItemsControl示例展示了如何为列表项添加双击命令;5) 使用要点和常见问题解答。文章强调MouseBinding能简化事件处理逻辑,特别适合MVVM开发模式。
2025-08-14 15:17:08
868
2
原创 【C#】用队列构建一个对象池管理对象的创建和释放
本文探讨了在WPF图像处理项目中用ConcurrentQueue替代Queue+lock实现对象池的优化过程。原方案存在多线程性能瓶颈和对象生命周期管理问题,改用ConcurrentQueue后获得了更好的线程安全性和简洁性,同时避免了锁竞争。关键点包括:直接使用TryDequeue而非依赖Count判断,处理容量超限问题,以及注意HObject资源的特殊性。最终结论是ConcurrentQueue更适合高并发场景,但资源生命周期管理才是对象池设计的核心难点。
2025-08-12 16:47:44
1036
2
原创 【C#】C#并行编程在图像处理中的那些事儿:避坑与优化
本文总结了C#并行编程在图像处理中的关键实践。针对多线程处理图像ROI、批量检测等场景,使用Parallel.For/ForEach可显著提升性能,但需注意线程安全问题:用ConcurrentBag等线程安全集合替代List<T>,妥善管理非托管资源,采用Partitioner优化任务分配。文章强调异常捕获、控制并行度(建议设为CPU核心数)以及避免过度并行化。实测显示,将串行循环改造为并行后处理速度提升1倍。关键原则是:最小化共享状态,确保资源释放,根据任务特性权衡并行收益与复杂度。
2025-08-11 21:26:08
883
2
《PrismPrism.DryIoc 对话框中使用 Region 的完整指南 》 配套资源
2025-08-25
halcon算子列表.xlsx
2025-08-05
TimeQuest笔记
2013-04-09
孙鑫C++教程(全20讲)PPT讲义 + code
2024-04-18
wpf .net prism 框架 项目模板
2023-12-08
tesseract-ocr-setup-4.00.00dev + tessdata + jTessBoxEditorFX-2.2
2022-04-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅