自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(85)
  • 资源 (9)
  • 收藏
  • 关注

原创 C# 登顶 TIOBE 年度编程语言!这一次,真的轮到 .NET 开发者扬眉吐气了

摘要:C# 被 TIOBE 评为2025年度编程语言,其流行度增长率位居榜首。这一结果打破了人们对C#的刻板印象,表明其在跨平台开发(.NET Core到.NET 8)、游戏开发(Unity引擎)和企业级应用中的持续增长。C#在2026年1月TIOBE榜单中稳居前五,证明其技术路线的长期价值。对于开发者而言,这意味着C#是一个安全、可持续投入的技术选择,学习投入不会被浪费,且能获得行业认可。TIOBE的认可验证了.NET生态的工程化能力和长期潜力。

2026-01-06 13:30:33 977 1

原创 C# 上位机实战:用 LiteDB 构建本地测试数据管理系统

本文介绍了如何使用C#和LiteDB构建本地测试数据管理系统。LiteDB是一个纯.NET实现的嵌入式NoSQL数据库,具有单文件存储、面向对象、支持LINQ查询等特点,非常适合上位机和桌面软件的数据存储需求。文章详细讲解了从数据模型设计、数据库初始化、测试数据生成、数据写入与查询,到导出Excel和批量删除归档的完整实现过程。通过这个系统,开发者可以高效管理测试数据、运行日志等本地数据,提高上位机软件的开发效率。

2026-01-05 11:24:38 338

原创 作为一名 C# 开发者,我为什么想认真推荐一次 LiteDB

本文分享了作者作为C#开发者在桌面应用和上位机软件项目中使用LiteDB的经验。相比传统的SQLite,LiteDB作为纯.NET实现的嵌入式NoSQL数据库,提供了更符合C#开发直觉的体验:无需SQL和ORM,直接存储对象,数据结构变更成本低,部署简单。文章通过实际测试系统中的数据存储案例,展示了LiteDB在动态数据结构、稳定写入和问题追溯方面的优势。虽然不适合复杂关系模型,但对于本地对象存储场景,LiteDB能显著降低心智负担和出错概率,是C#开发者值得尝试的高效工具。

2026-01-05 11:07:15 864

原创 一个撤销 / 重做 Bug,让我重新理解了命令模式

这篇文章探讨了撤销/重做功能的设计问题,通过一个典型Bug案例引出了命令模式的应用价值。

2026-01-04 14:05:49 901

原创 从 WPF 到 Avalonia 的迁移系列实战篇7:EventTrigger 的迁移

《从WPF到Avalonia的EventTrigger迁移实践》展示了两种框架下实现交互效果的差异。WPF通过EventTrigger和Storyboard直接在XAML中绑定事件与动画,而Avalonia采用类似CSS的过渡方案:使用样式选择器(如:pointerover)配合Transitions/Animations替代事件触发,复杂动画需结合C#动画API实现。迁移时需将WPF的Storyboard转换为Avalonia的KeyFrame动画,并利用伪状态选择器处理基础交互效果。

2025-09-15 15:44:31 1027

原创 从 WPF 到 Avalonia 的迁移系列实战篇6:Trigger、MultiTrigger、DataTrigger 的迁移

本文介绍了如何从WPF的Trigger、MultiTrigger和DataTrigger迁移到Avalonia的等效实现。在Avalonia中,WPF的Trigger可通过伪类选择器(如:pointerover、:pressed)替代,MultiTrigger则使用组合伪类实现。对于DataTrigger,Avalonia提供了DataTriggerBehavior或绑定转换器来实现数据驱动的样式变化。文章通过具体代码示例展示了WPF和Avalonia两种框架下的实现对比,并附有完整的项目源码供参考。

2025-09-14 14:47:58 1049

原创 从 WPF 到 Avalonia 的迁移系列实战篇5:ControlTheme 和 Style区别

这篇文章对比了Avalonia中ControlTheme与传统Style的区别。ControlTheme用于定义控件主题,通过Theme属性应用,支持继承和重用,适合可切换的外观;而Style通过选择器应用,可叠加但不支持继承。文章通过按钮样式实例展示了两种方式的代码实现:ControlTheme能基于已有主题派生新样式,而Style需要重复定义相似样式。最后总结了两种方式的特性对比表,并说明ControlTheme的查找规则和应用场景。

2025-09-02 18:10:01 1184

原创 从 WPF 到 Avalonia 的迁移系列实战篇4:控件模板与 TemplatedControl

本文对比了WPF和Avalonia中实现自定义控件的不同方法,重点介绍了Avalonia中的TemplatedControl机制。通过一个三角形闪烁控件的示例,展示了两种框架的实现差异:WPF使用Control基类+OnApplyTemplate方法,而Avalonia采用TemplatedControl基类+OnApplyTemplate事件,并使用StyledProperty替代WPF的DependencyProperty。文章还演示了两种框架在动画实现上的区别,Avalonia使用KeyFrame动画

2025-08-31 14:45:39 1191

原创 从 WPF 到 Avalonia 的迁移系列实战篇3:ResourceDictionary资源与样式的差异与迁移技巧

本文对比了WPF与Avalonia在资源管理上的关键差异。WPF采用统一的ResourceDictionary存储所有资源(颜色、画笔、样式等),而Avalonia将资源(Resources)与样式(Styles)分离管理。文章通过learningAvalonia示例展示了WPF资源字典的典型结构、合并方式及引用方法,并指出其混合存储带来的维护难题。为后续Avalonia迁移提供了重要参考。

2025-08-28 19:10:35 1222

原创 从 WPF 到 Avalonia 的迁移系列实战篇2:路由事件的异同点与迁移技巧

摘要: 本文对比 WPF 与 Avalonia 的路由事件机制,分析二者在概念、注册方式、事件处理及迁移技巧上的差异。

2025-08-28 12:49:57 1323

原创 从 WPF 到 Avalonia 的迁移系列实战篇1:依赖属性的异同点与迁移技巧

文章摘要(145字): 本文对比了WPF与Avalonia在依赖属性实现上的差异,通过BlinkingButton控件案例展示两者核心区别。WPF依赖DependencyProperty.Register和静态回调,代码冗余度高;Avalonia采用泛型Register<>和响应式订阅(IObservable),大幅简化代码并提升类型安全。分析表明,Avalonia在保留WPF核心功能的同时,通过语法优化降低了开发门槛,为WPF迁移跨平台提供了平滑过渡方案。文章详细解析了两种实现的注册方法、变化

2025-08-27 19:58:11 1766

原创 C# 默认接口方法:强大而需谨慎使用的双刃剑

摘要: C# 8.0引入的默认接口方法解决了接口扩展的兼容性问题,允许为接口方法提供默认实现。核心价值在于向后兼容性,支持库的无破坏性升级,同时实现了特质模式(Traits)和减少样板代码。但需注意多重继承冲突、版本控制陷阱和违反接口设计原则等问题。最佳实践包括谨慎用于库版本控制和可选功能,避免替代抽象类或过度使用。该特性为C#提供了更灵活的设计选择,但需权衡使用场景。

2025-08-25 10:30:00 375

原创 彻底关闭 VSCode 的受限模式,让所有插件自由运行!

本文介绍了如何彻底关闭VSCode的受限模式(Restricted Mode),解决插件无法运行、频繁弹出信任提示等问题。主要提供三种方法:全局关闭受限模式、仅信任当前项目、配置信任文件夹白名单,并分析利弊。关闭后可恢复插件功能,但会降低安全性。建议个人开发机器使用,企业环境需谨慎。文章还包含常见问题解答和效果验证方式,帮助开发者提升工作效率。

2025-06-19 19:45:16 2943

原创 WPF 常见坑:ContentControl 不绑定 Content 时,命令为何失效?

在 WPF 开发中,Content="{Binding}" 是一个容易被忽视但至关重要的绑定设置。本文通过一个托盘菜单的案例,详细解析了它的核心作用。当使用 ContentControl 时,如果没有设置 Content="{Binding}",ContentControl.Content 默认为 null,导致样式触发器和命令无法生效。即使设置了 ContentTemplate,也需要通过 Content="{Binding}" 提供内容对象。

2025-05-22 15:30:01 1700

原创 WPF中资源(Resource)与嵌入的资源(Embedded Resource)的区别及使用场景详解

在WPF项目开发中,合理设置资源文件的“生成操作”至关重要。常见的选项包括“Resource”和“Embedded Resource”,它们在编译行为、加载方式和适用场景上有所不同。“Resource”适用于静态UI资源,如图像和样式表,可通过XAML直接引用;而“Embedded Resource”则适合动态加载的文件,如SVG、JSON等,需通过代码读取。跨程序集访问时,“Embedded Resource”更为灵活。正确选择资源类型不仅能优化项目结构,还能提升加载效率和运行性能。

2025-05-19 18:08:53 1644

原创 WPF 样式属性优先级终极指南:再也不用为样式失效抓头发了!

目标建议做法控件支持换肤模板中颜色使用样式可复用用 ResourceDictionary 管理资源支持外部样式重写颜色Trigger 中使用+ 样式中提供资源支持组件局部换肤使用定义默认颜色WPF 的样式系统看似复杂,其实只要搞清楚“谁优先级高谁先出手”,很多看似神秘的“样式失效”都能迎刃而解。希望这篇文章能帮你解决大部分样式疑难杂症,特别是在模板开发、换肤系统、通用样式设计中,掌握这些规则将极大提升你的效率和代码质量。

2025-05-19 15:56:52 1327

原创 WPF第三方控件的魔法:揭秘XmlnsPrefix的妙用

在WPF开发中,XmlnsPrefix和XmlnsDefinition特性极大地简化了第三方控件的使用。传统方式需要手动映射CLR命名空间到XML命名空间,而现代控件库通过程序集级别的XmlnsPrefix特性,只需在XAML中声明一个URI即可自动关联多个CLR命名空间。这种机制不仅简化了使用流程,还提供了更好的设计时支持,如IDE的自动补全功能。XmlnsPrefix通过推荐统一的前缀和URI,确保了代码的一致性和可读性,同时避免了命名冲突。理解这一机制有助于更好地使用第三方库,并在开发自定义控件库时设

2025-05-14 14:54:54 555

原创 C# 中的 nameof 表达式:用法详解与最佳实践

nameof表达式是 C# 6.0 引入的一个简单但强大的特性,它提高了代码的可维护性和安全性。通过本文的介绍,希望您能充分理解并开始在项目中应用nameof,让您的代码更加健壮和易于维护。

2025-04-08 17:13:41 1305 1

原创 在WPF中使用VisualCollection创建复杂Adorner详解

是WPF中用于管理一组Visual对象的集合类。可以高效管理多个可视化子元素自动处理视觉树的添加和移除提供对子元素的索引访问首先需要从Adorner// 初始化你的装饰元素// 在这里创建和添加你的可视化元素// 必须重写的方法// 在这里布局你的子元素通过VisualCollection创建复杂Adorner是WPF中强大的UI扩展技术。在不修改原有控件的情况下添加装饰和功能创建复杂的交互式覆盖层保持代码的组织性和可维护性。

2025-03-31 11:17:04 682

原创 WPF中的Adorner基础用法详解与实例

Adorner是WPF中一种特殊类型的FrameworkElement,用于向用户提供可视化提示。它位于AdornerLayer中,这是一个始终位于装饰元素或装饰元素集合上方的呈现图面。独立于被装饰元素的布局系统,不会影响原有UI布局始终显示在被装饰元素之上,无法通过z-order改变其层级可以接收输入事件,但也可以通过设置IsHitTestVisible属性将事件传递给下层元素要创建自定义Adorner,需要继承Adorner类并重写相关方法。

2025-03-27 14:52:32 1535

原创 C#进程通信方案终极对决:共享内存 vs gRPC,谁才是性能王者?|附实测数据+避坑指南

方案速度跨机器支持复杂度适用场景共享内存极快否中等单台设备上的高性能通信命名管道较快否中等同一台机器上的双向通信套接字较快是高跨机器的通信WCF中等是高需要灵活配置的通信场景gRPC高是高高性能和跨平台支持的场景。

2025-02-14 13:23:23 1686

原创 为什么我用Python控制仪器比C#慢很多?如何优化性能?

许多仪器控制库(如NI-VISA、GPIB)的原生实现是C/C++,Python通过包装层调用这些库,而C#可以直接调用原生库,减少了额外的开销。Python是解释型语言,代码在运行时逐行解释执行,而C#和C++是编译型语言,代码在运行前已经编译成机器码,执行效率更高。Python的GIL限制了多线程的并行执行,在控制仪器时,高频率的IO操作和多线程需求会受到GIL的影响,导致性能瓶颈。Python的动态类型和垃圾回收机制虽然方便,但也增加了运行时开销,而C#和C++的静态类型和手动内存管理则更高效。

2025-02-11 14:47:56 1080

原创 在WPF中完美显示SVG图片:最佳方案揭秘

在现代应用程序开发中,矢量图形(SVG)因其无损缩放和轻量化的特性,成为UI设计的主流选择。然而,WPF(Windows Presentation Foundation)原生并不支持直接加载SVG文件,这给开发者带来了一定的挑战。本文将为你揭秘在WPF中完美显示SVG图片的最佳方案,帮助你轻松实现高质量的矢量图形展示。虽然WPF支持矢量图形,但SVG文件需要经过转换才能在WPF中使用。立即尝试这些方案,让你的WPF应用拥有更精致、更专业的矢量图形体验!为了在WPF中高效地显示SVG图片,推荐使用。

2025-02-11 13:55:12 3073 4

原创 解锁WPF超能力:深入理解MarkupExtension的使用技巧

MarkupExtension 是WPF中的一个基类,它允许你在XAML中通过一种简洁的方式动态生成属性值。常见的MarkupExtension包括Binding等。通过继承类,你可以创建自定义的MarkupExtension,以满足特定的需求。除了使用内置的MarkupExtension,你还可以创建自定义的MarkupExtension。首先,创建一个继承自的类,并重写方法。set;Nameget;set;Name }!} }

2025-02-07 18:48:27 1334

原创 深入浅出 Roslyn:C# 编译器的奥秘与强大工具

Roslyn 是 C# 和 Visual Basic .NET 的编译器平台,它由微软开发并开源。Roslyn 不仅仅是一个编译器,它还是一个开放的编译器平台,提供了丰富的 API,允许开发者对代码进行各种操作,例如语法分析、语义分析、代码生成等。

2025-02-04 13:38:48 1907

原创 适合 C# 开发者的 Semantic Kernel 入门:用 AI 赋能你的 .NET 应用

Semantic Kernel 为 C# 开发者提供了一个强大的工具,将传统编程与 AI 能力无缝结合。无论你是想构建一个智能助手,还是自动化复杂的业务流程,Semantic Kernel 都能为你提供强大的支持。现在,你已经掌握了 Semantic Kernel 的基础知识,并亲手构建了第一个 AI 应用。接下来,就轮到你了!打开 Visual Studio,开始探索 Semantic Kernel 的无限可能吧!如果你喜欢这篇博客,欢迎分享给你的朋友,或者在评论区留下你的想法。

2025-01-25 13:41:13 2073

原创 告别卡顿!WinForms界面流畅更新的终极指南

在WinForms中实现流畅的界面更新并不难,关键在于将耗时操作放到后台线程中执行,并通过合适的机制与UI线程通信。无论是使用Task,还是Timer和,都能有效解决界面卡顿的问题。如果你需要简单易用的解决方案,是不错的选择。如果你追求代码的简洁和现代性,Task和是更好的选择。如果你需要更精细的控制,可以尝试或Timer。希望本文能帮助你提升WinForms应用程序的用户体验!如果你有其他问题或想法,欢迎在评论区留言讨论!🚀。

2025-01-23 09:12:30 1365

原创 探索WPF中的RelativeSource:灵活的资源绑定利器

是WPF中用于绑定的一种特殊方式,它允许你相对于当前元素或其他元素来绑定数据。与Source和不同,不依赖于具体的元素名称或数据源对象,而是通过相对路径来定位绑定源。绑定到父元素:当你需要绑定到当前元素的父元素或祖先元素时。绑定到自身:当你需要绑定到当前元素本身时。绑定到模板的父元素:在控件模板或数据模板中,绑定到模板的父元素。是WPF中一个非常强大的工具,它提供了灵活的绑定方式,特别是在处理复杂的UI层次结构时。通过Self和等模式,你可以轻松地实现各种绑定需求,从而提升代码的可维护性和可读性。

2025-01-23 09:05:12 1953

原创 C# 开发者必备:4个最强大的 Modbus 库,轻松搞定工业通信!

NModbus 是一个开源的 Modbus 库,支持 Modbus RTU 和 Modbus TCP 协议。它提供了简单易用的 API,适合初学者和有经验的开发者使用。EasyModbus 是一个功能强大的 Modbus 库,支持 Modbus TCP、RTU 和 ASCII 协议。它提供了丰富的功能和易于使用的 API,适合复杂的工业应用。Modbus.Net 是一个高性能的 Modbus 库,支持 Modbus TCP、RTU 和 ASCII 协议。它专注于性能和灵活性,适合需要处理大量数据的应用场景。

2025-01-20 22:35:36 4751 2

原创 IVI.NET:让仪器控制更智能、更高效!

IVI.NET 是一种基于 .NET 平台的仪器驱动技术,旨在实现仪器的互换性和高效控制。它结合了 IVI 标准的优势和 .NET 框架的灵活性,广泛应用于自动化测试系统的开发。尽管存在一定的性能开销和学习曲线,但其高效开发和仪器互换性的特点使其成为现代测试系统的重要工具。

2025-01-16 19:12:31 956

原创 C#图表性能的巅峰之选:LightningChart®.NET

例如,在工业自动化中,实时监控传感器数据的高频更新;或在地球科学中,渲染大规模3D地形数据的应用场景中,LightningChart®.NET都表现出了其无可替代的性能优势。如果您正在寻找C#下性能最强的图表控件,无论是实时监控还是大数据可视化,LightningChart®.NET都是您的最佳选择。本文将深入探讨LightningChart®.NET的性能优势,并通过与其他图表控件的对比和简单的应用示例,帮助开发者快速找到高性能场景下的最佳图表解决方案,为性能选择提供实用指南。

2025-01-14 18:08:42 2144

原创 C# 数据拟合教程:使用 Math.NET Numerics 的简单实现

数据拟合是一种通过函数模型来近似描述数据的方法。它的目标是找到一个函数,使其尽可能贴合数据点。线性拟合:寻找最符合数据的直线。多项式拟合:用多项式函数拟合数据。非线性拟合:通过自定义函数模型描述复杂数据。如果需要拟合指数型或其他自定义函数,可以使用模块。// 示例数据// 指数拟合 y = a * exp(b * x)Console.WriteLine($"拟合参数:a =p0F2// 示例数据 double [ ] xData = {

2025-01-14 17:52:17 3140

原创 WPF中如何在MVVM模式下跨线程更新UI

Model:数据模型,表示应用程序的核心业务数据和逻辑。View:界面视图,负责显示UI。ViewModel:视图模型,连接View和Model,处理UI展示的数据及逻辑,充当View与Model之间的中介。通过数据绑定,View与ViewModel之间的交互可以通过属性自动同步,这样UI的变化就能响应到数据的变化,而无需直接操作UI控件。尽管MVVM模式通过数据绑定解耦了UI和业务逻辑,但当涉及到跨线程更新UI时,我们仍然需要使用Dispatcher机制确保UI线程的安全性。在WPF中,通过。

2025-01-13 10:07:22 2395

原创 WPF如何跨线程更新界面

在WPF中,通过使用方法,可以方便地跨线程更新UI,确保线程安全。这对于需要在后台线程执行任务的应用程序非常重要。无论是简单的文本更新,还是复杂的UI操作,Dispatcher都提供了安全且高效的跨线程更新机制。希望这篇博客能够帮助你理解如何在WPF中跨线程更新UI。如果你有任何问题,欢迎在评论区讨论!

2025-01-13 09:51:51 1603

原创 WinForm如何跨线程更新界面

在WinForms中,跨线程更新UI控件是一项常见需求。通过使用控件的Invoke方法,我们可以确保在后台线程中执行UI更新操作时,能够安全地将UI更新操作委托给UI线程。这样可以避免线程安全问题,提高程序的稳定性和性能。希望这篇博客能够帮助你理解如何在WinForms应用程序中跨线程更新UI。如果你有任何问题,欢迎在评论区讨论!

2025-01-13 09:48:50 1281

原创 C#中序列化的选择:JSON、XML、二进制与Protobuf详解

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写。它广泛用于Web API、配置文件和数据存储。XML(eXtensible Markup Language)是一种标记语言,具有严格的格式和结构。它广泛用于配置文件、数据存储和 Web 服务。二进制序列化将对象转换为二进制格式,适合高效存储和传输。它通常用于高性能场景或需要紧凑数据格式的场景。Protobuf。

2025-01-11 14:27:19 1096

原创 C#桌面开发选WinForm还是WPF?一文彻底解析两者的优劣!

WinForm(Windows Forms)是 .NET Framework 早期推出的桌面应用程序开发框架。它基于传统的 GDI+ 绘图技术,提供了丰富的控件库和简单易用的 API。WinForm 适合快速开发小型桌面应用程序。特性WinFormWPF界面设计简单,传统风格强大,现代化风格数据绑定有限强大开发效率高中性能较低较高适用场景小型应用、快速开发复杂应用、现代化 UI如果你需要快速开发一个小型桌面应用,WinForm 是一个不错的选择。

2025-01-11 14:22:54 9696

原创 详解C#调用系统文件窗口:打开文件、保存文件和选择文件夹

这些系统文件窗口不仅提供了良好的用户体验,还能简化开发工作。如果你有任何问题或建议,欢迎在评论区留言!

2025-01-11 14:17:57 4623

原创 详解C#的文件写入和读取:从基础到高级应用

C#提供了丰富的文件读写方法,从简单的File类到高级的FileStream和,每种方式都有其适用的场景。通过本文的介绍,你应该能够根据实际需求选择合适的文件操作方法,并掌握文件读写的最佳实践。如果你有任何问题或建议,欢迎在评论区留言!

2025-01-11 14:11:42 2646

原创 C#委托与事件全解析:从理论到实战,一文搞定

委托是一种类型安全的函数指针,它允许你将方法作为参数传递或存储。委托的核心作用是解耦代码,使得方法可以被动态调用,而不需要在编译时确定具体的调用对象。委托是一种引用类型。委托可以指向一个或多个具有相同签名的方法。委托是类型安全的,编译器会检查方法签名是否匹配。事件是委托的一种特殊形式,通常用于实现观察者模式。事件允许类或对象在特定动作发生时通知其他类或对象。事件的核心作用是解耦事件的发布者和订阅者。事件是基于委托的。事件只能在声明它的类内部触发,外部只能订阅或取消订阅。

2025-01-11 14:07:12 3201

GNU Radio入门

绝对是学习软件无线电的最佳入门教程

2012-03-21

Linux从入门到精通

真真做到从入门到精通,如果认真看了,保证你的linux基本可以出师了!

2012-09-28

linux redhat中文安装正确图解 更改分辨率

看了这两篇详解图后,绝对能够完全掌握正确的安装方法。原来linux如此简单。

2012-03-24

软件无线电教程(既经典GNU Radio入门)

由英文教材翻译过来的经典软件无线电教程,如果不知道GNU Radio是什么的话,你还是不要学软件无线电了。

2012-03-24

再再论指针

C语言最精华的部分就是指针,这份资料通过通俗易懂的语言,形象生动的实例,让你对指针有一个全新的认识,是提高C语言的最佳资料。

2012-09-26

linux程序设计(第三版).pdf

学习linux的基础必备教程!是中文版的,如果英文好要看原版

2012-09-28

C语言程序实例

把这些例子都搞懂了,c语言基本就过关了,一定要搞懂

2012-09-26

空空如也

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

TA关注的人

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