- 博客(204)
- 收藏
- 关注
原创 句柄是什么?有什么用?举例说明
在C#编程中,“句柄”(Handle)是一个与操作系统资源相关联的标识符。句柄是一个指针或者索引,用于在程序代码中引用系统资源,如窗口、文件、线程等。由于直接操作这些资源非常危险且复杂,操作系统提供句柄作为间接引用,以便程序能够安全、有效地管理和使用这些资源。
2024-10-22 17:18:14 878
原创 C#Winform的控件基类Control
需要注意的是,Control类的属性和事件非常多,上述列举的只是一些最常用的和最基本的。同时,不同的控件可能会有自己特有的属性和事件,这些属性和事件在继承自Control类的基础上进行了扩展。MouseDown、MouseEnter、MouseMove、MouseHover、MouseLeave 和 MouseUp:分别当鼠标在控件上按下、移入、移动、悬停、移出和释放时发生。Height 和 Width:分别获取或设置控件的高度和宽度。TabIndex:获取或设置在控件的容器的控件的Tab键顺序。
2024-10-22 17:13:16 373
原创 FrameWork使用EfCore数据库映射举例
Microsoft.EntityFrameworkCore新的版本不支持FrameWork框架。Microsoft.EntityFrameworkCore 版本控制在2.1.14以下。同样下载Microsoft.EntityFrameworkCore.sqlite。这里举例使用旧版本实现数据存取。
2024-10-14 15:55:35 321
原创 一个简单快捷操作Excle的库
MiniExcel是一个功能强大且易于使用的.NET库,能够高效地处理Excel文件的读取、写入和数据填充。MiniExcel是一个简单且高效的.NET库,用于处理Excel文件的读取、写入和数据填充。假设有一个Excel文件“test.xlsx”,其中包含名为“Sheet1”的工作表,并且该工作表有三列:Id、Name、Title。如果Excel文件中的列与C#类中的属性不匹配,MiniExcel会尝试进行自动映射,但可能需要手动调整列映射关系以确保数据的正确性。一、安装MiniExcel。
2024-10-12 21:56:10 445
原创 线程同步的机制有哪些?区别是什么
信号状态重置:AutoResetEvent:自动重置信号状态。ManualResetEvent:需要手动重置信号状态。EventWaitHandle:可以设置为自动重置或手动重置模式。lock:不涉及信号状态的重置。使用场景:AutoResetEvent 和 ManualResetEvent:主要用于线程间的信号通知和同步。EventWaitHandle:提供了更灵活的线程同步机制,适用于复杂场景。lock:主要用于保护共享资源,防止数据竞争。
2024-10-09 15:50:38 1015
原创 创建和读写内存映射文件,用于同电脑上不同软件之间进行数据交互
在C#中,MemoryMappedFile 类允许你创建或打开一个内存映射文件,而 ViewAccessor 类则提供了一种方法来访问该文件的特定部分。以下是一个完整的示例,展示了如何创建或打开一个内存映射文件,如何使用 ViewAccessor 进行读写操作,以及如何查询数据。
2024-10-09 15:07:51 257
转载 Dappe&&Dapper.SqlBuilde&&SimpleBuilder.Creat和SimpleBuilder.CreateFluent比较对比差异
Dappe&&Dapper.SqlBuilde&&SimpleBuilder.Creat和SimpleBuilder.CreateFluent比较对比差异
2024-09-26 09:45:50 111
原创 ConfigurationManager类功能如何使用
ConfigurationManager类是.NET Framework和早期.NET Core版本中用于访问应用程序配置信息的核心组件。尽管在.NET Core的后续版本中,它被更现代化的Microsoft.Extensions.Configuration包中的API所替代,但在许多.NET Framework项目中,ConfigurationManager类仍然被广泛使用。
2024-09-26 09:08:53 629
原创 在没有源程序的情况时,如何通过控制鼠标按钮控制电脑exe程序?
有时候想控制第三方软件,但是没有源程序,可以控制鼠标键盘自动操作软件达到我们想要的目的。首先建一个功能类包含窗口控制,鼠标控制和输入控制等。
2024-07-23 14:09:08 480
原创 NetFrameWork项目如何引用NetCore的项目
在.NET生态系统中,.NET Framework 和 .NET Core(现已统一为 .NET,包括 .NET 5、.NET 6 等后续版本)是两种不同的运行时和框架,它们在设计之初就有着不同的目标和兼容性考虑。因此,直接在一个 .NET Framework 项目中引用 .NET Core 项目(或任何 .NET 5/6/等更高版本的项目)是不被直接支持的,因为两者在底层实现和运行时环境上存在显著差异。将 .NET Core 项目中的共享代码部分迁移到一个 .NET Standard 类库中(如上述)。
2024-07-17 11:40:13 988
原创 wpf界面和net web界面的相同和不同点
综上所述,WPF界面和.NET Web界面在开发平台、界面设计、部署和运行、性能和资源消耗、更新和维护以及访问范围等方面存在显著差异。WPF和.NET Web界面(如ASP.NET)都构建在.NET框架之上,这意味着它们都可以利用.NET提供的丰富类库和功能。WPF和.NET Web界面都支持数据绑定,可以将UI元素与数据源(如数据库、对象等)连接起来,实现数据的自动更新和显示。.NET Web界面(如ASP.NET):主要面向Web应用程序的开发,运行在Web服务器上,通过浏览器与用户进行交互。
2024-07-02 12:19:05 554
原创 ASP.Net.WebAPI和工具PostMan
WebAPI 是一种传统的方式,用于构建和暴露 RESTUI风格的Web服务。它提供了丰富的功能和灵活性,可以处理各种HTTP请求,并支持各种数据格式,如JSON、XML等。WebAPI使用控制器(Controllers)和动作方法(ActionMethods)的概念、通过路由配置将请求映射到相应的方法上。开发人员可以使用各种属性和过滤器来处理请求、控制访问权限、验证数据等。Postman是一款API测试和开发环境的软件,旨在简化API开发过程、测试和文档编制。
2024-06-24 00:02:04 1459
原创 C#部分方法有什么用处?和传统方法有什么区别?什么时候用合适?
在C#中,部分类(partial class)和部分方法(partial method)是两个不同的概念,但它们经常一起使用,特别是在代码生成和框架设计中。下面我将分别解释这两个概念,并讨论它们的用处、与传统方法的区别以及何时使用它们。
2024-06-18 14:35:37 1079
转载 跨线程通讯/操作UI-Invoke或者BeginInvoke的区别
Invoke,它和BeginInvoke有什么区别在Invoke或者BeginInvoke的使用中无一例外地使用了委托Delegate。为什么用他们?
2024-06-15 23:11:02 94
原创 AForge.NET介绍
丰富的文档和示例:虽然不是每个方法都有详细的文档,但主要的模块都有足够的信息供开发者参考,并且提供了Image Processing Prototyper和AForge.NET Debugging Visualizers等开发工具。总的来说,AForge.NET是一个功能全面、易于使用和扩展的开源计算机视觉和机器学习库,适用于各种涉及图像处理、计算机视觉、人工智能等领域的开发任务。提供了一些机器人的工具类库,帮助开发者进行机器人控制和编程。提供了用于遗传计算的接口和类,支持优化、近似等问题的解决。
2024-06-13 17:03:13 382
原创 常见日志库NLog、log4net、Serilog和Microsoft.Extensions.Logging介绍和区别
在C#中,日志库的选择主要取决于项目的具体需求,包括性能、易用性、可扩展性等因素。以下是关于NLog、log4net、Serilog和Microsoft.Extensions.Logging的基本介绍和使用示例。
2024-06-11 21:11:43 1511
原创 视觉平面简易三点标定
如果只通过三个点来建立转换关系,通常我们考虑的是二维平面上的仿射变换,而不是相机标定中的三维空间变换。这意味着我们假设所有的测量点都位于同一个平面上,且相机也是平行于这个平面的。基于这样的假设,可以通过这三个点来计算一个2D仿射变换矩阵,然后利用这个矩阵将像素坐标转换为该平面上的机械坐标。来将任意像素坐标转换为相应的机械坐标。需要注意的是,由于是仿射变换,它只能在假设的平面上保持线性关系,对于非共面点或有透视失真的情况,这种方法可能不够精确。对于更复杂的场景,建议采用更全面的相机标定方法。
2024-06-10 22:14:06 517
原创 Task vs Thread
总结来说,Task是面向任务的并发模型,更适合现代C#应用开发,它在大多数情况下提供了一个更高效、更易用的并发解决方案。Task是对线程的进一步封装,提供了丰富的API来管理异步操作,如取消、延续任务、异常处理等。底层实现: 尽管Task是更高层次的抽象,但它在内部仍然可能使用Thread来执行任务,尤其是在没有其他更高效机制(如IO完成端口)可用的情况下。C#中的Task和Thread都是用于实现多线程和并发操作的重要组件,但它们在设计哲学、使用场景和功能特性上存在显著差异,同时也有一些内在的联系。
2024-06-10 19:14:52 434
原创 C#有哪些方式实现回调函数、处理异步操作或响应某些条件时的动作
尽管这种方式在现代C#编程中较少使用,但IAsyncResult接口和AsyncCallback委托仍然存在于.NET框架中,用于支持基于IAsyncResult的异步模式(APM)。委托类似于C/C++中的函数指针,但它们是类型安全的。使用诸如Promises(在C#中为Task)或Async/Await的模式可以避免嵌套回调(回调地狱),使代码更易于阅读和维护。C#提供了预定义的委托类型Action和Func,用于封装没有返回值的方法(Action)和具有返回值的方法(Func)。
2024-06-09 00:45:41 904
原创 C#编码中间语言IL,也称为 MSIL 或 CIL
C# 是一种编译型语言,它的源代码(.cs 文件)首先被编译成中间语言(IL,也称为 MSIL 或 CIL,即 Microsoft Intermediate Language),然后这个中间语言代码通常被封装在一个程序集(.dll 或 .exe 文件)中。这个过程是由 C# 编译器(如 csc.exe,它是 Microsoft .NET Framework SDK 的一部分)完成的。
2024-06-09 00:20:02 1112
原创 System.Collections.Generic 中的接口和类型区分
这些接口定义了一组通用的集合行为,而具体的实现(如 List、Dictionary 等)则遵循这些接口,从而提供具体的集合功能。这些集合是强类型的,也就是说,你可以指定集合中的元素类型,这在编译时提供了类型安全性。继承自 IEnumerable,表示一个包含元素的泛型集合,这些元素是强类型的,并提供了对集合中元素数量的访问以及添加、删除和清空集合成员的方法。继承自 ICollection,表示一个有序的集合,可以通过索引访问元素,并且支持在集合中的特定位置插入和删除元素。
2024-05-25 09:54:07 558
转载 事件和委托应用和区别
一个广为流传的错误说法:事件是一种特殊的委托希望看完这个例子你能理解事件的意义,事件与委托的关系,以及上面那句话为什么不合理假设你有一个公司,你有10名员工,1000元的股票市值,公司倒闭会造成裁员9人,市值蒸发900元。你会怎么写?
2024-05-24 23:42:32 121
原创 书籍推荐计算机相关
计算机程序的构造和解释》(Structure and Interpretation of Computer Programs):这本书被誉为“程序设计的圣经”,它对程序设计和计算机语言的设计有着深远的影响。《C程序设计语言》(The C Programming Language):这本书是C语言的经典之作,它简洁、清晰地介绍了C语言的设计理念和编程方法。《代码大全》(Code Complete):这本书是“优秀的编程实践的百科全书”,它详细讨论了如何编写高质量、可维护的代码,是所有程序员的必读之作。
2024-05-21 13:42:17 377
原创 自动配置状态参数
请注意,在这个例子中,我假设了 XML 文件的格式,并且根据这个格式编写了相应的加载逻辑。此外,由于 Stateless 库的 StateMachine 类在配置时通常是链式的,所以我在 Load 方法中直接进行了配置。对于触发事件,你通常不需要在 XML 中明确列出它们,因为你可以在定义转移时隐式地定义它们。在使用 Stateless 开源库时,你可以通过 XML 文件来定义状态机的状态、转移和触发事件,并编写代码来读取 XML 文件并自动配置 Stateless 状态机。
2024-05-17 18:51:43 279
原创 状态机不同特性使用举例(使用stateless)
/ 设置状态进入和离开时的动作.OnEntry(() => Console.WriteLine("开始浏览商品")).OnExit(() => Console.WriteLine("浏览商品结束"));.SubstateOf(State.Browsing) // 继承自Browsing状态.OnEntry(() => Console.WriteLine("商品已添加到购物车")).OnExit(() => Console.WriteLine("离开购物车"));
2024-05-17 18:42:57 479
原创 KeyValuePair和Dictionary和Tuple区别和应用
KeyValuePair是一个简单的键值对容器,而字典则是一个包含多个键值对的集合,提供了更强大的数据管理和访问功能。KeyValuePair是一个表示键值对的数据结构,由键(Key)和与之相关联的值(Value)组成。查找:Tuple 不支持基于元素的查找,而 Dictionary 支持快速的基于键的查找。键的唯一性:Dictionary 要求键是唯一的,而 Tuple 没有这样的要求。类型安全:Dictionary 的键和值都是类型安全的,即键和值都有明确的类型。它通常用于实现查找表、缓存和符号表等。
2024-05-16 14:12:44 599
原创 编程中有哪些工具和方法可以帮助开发者在开发过程中捕获和避免潜在的错误
当你在代码中放置这样的断言时,你实际上是在告诉编译器:“在调试模式下,我确信这个条件(在这里是 fsm!= null)必须为真。除了 Debug.Assert,还有其他断言库,如 NUnit、xUnit 和 MSTest,它们提供了更丰富的断言方法和更好的测试框架。在编程中,除了 Debug.Assert,还有一些类似的工具和方法可以帮助开发者在开发过程中捕获和避免潜在的错误。防御性编程:使用断言是防御性编程的一部分,它有助于在错误发生时立即捕获它们,而不是让它们潜伏在代码中,直到更晚的时候才导致问题。
2024-05-16 10:23:55 318
原创 ⚛⚖⚘一些特殊符号Unicode字符
字符“⚙”(U+2699)是一个Unicode字符,属于“补充符号和图片”(Supplemental Symbols and Pictographs)区块。特殊字体和排版:一些特殊的字体或排版设计中可能会包含这个字符,用于创建独特的视觉效果或表达特定的主题。聊天和社交媒体:在聊天应用或社交媒体平台上,用户可能会用它来表达与机械、工程或技术相关的概念或情感。⚚ 正交十字架(Orthodox Cross, U+269A)⚔ 交叉的剑(Crossed Swords, U+2694)
2024-05-16 09:09:45 703
原创 简易状态机
它是一个基于Spring框架的状态机库,提供了基于注解的方式来定义状态和状态转换。Stateless是一个轻量级的.NET状态机库,它支持以声明式的方式定义状态机,并提供了一种简洁的API来触发事件和查询状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。这只是一个简单的状态机框架示例,你可以根据需要扩展它,比如添加更复杂的逻辑、状态继承、状态转换的守卫条件等。可以定义一个基础的State类来表示状态,以及一个StateMachine类来管理状态的转换。1现态:是指当前所处的状态。
2024-04-27 19:41:35 621
原创 System.Exception有哪些类型分别什么意思
这些子类可以根据异常的来源和性质进行分类,例如系统异常(System.SystemException)和应用异常(System.ApplicationException)。而应用异常则是由应用程序生成的错误。System.SystemException 类是 System.Exception 的一个直接子类,它表示由系统引发的异常。尽管在较新的.NET版本中,使用自定义异常类而不是 ApplicationException 更为普遍,但它在早期版本中确实被用作应用程序级异常的基类。
2024-04-25 15:43:37 1534 1
原创 一个缓存泛型自动处理队列,留有处理事件接口
以下是一个简单的泛型缓存队列工具的示例,它使用了System.Collections.Concurrent命名空间下的BlockingCollection作为线程安全的队列,并通过Task在后台自动处理队列中的项。在C#中,创建一个通用泛型缓存队列工具通常涉及到使用泛型(T)来支持任意类型的队列项,并且实现先进先出(FIFO)的队列逻辑。为了提供自动处理和事件通知的功能,我们可以使用后台线程来处理队列中的项,并通过事件或委托来通知监听者队列的状态变化。
2024-04-24 15:27:39 512 1
原创 System.IO.Path应用说明
根据具体的文件和目录操作需求,你可能还需要使用其他方法,如 DirectorySeparatorChar 属性(返回当前操作系统使用的目录分隔符字符)和 AltDirectorySeparatorChar 属性(返回备用目录分隔符字符,在Windows中通常是 /)。在C#中,System.IO.Path 类提供了一组静态方法和属性,用于处理文件系统中的文件路径。// 例如 “oahgjdi.tmp”GetTempFileName: 在系统的临时文件夹中创建一个唯一的临时文件,并返回其完整路径。
2024-04-24 14:56:51 464
原创 一个快速克隆方法引出深浅拷贝说明
换句话说,它执行的是一个成员级的克隆,对于引用类型的字段,它复制的是引用本身,而不是引用的对象。需要注意的是,MemberwiseClone方法创建的是浅拷贝,这意味着如果对象包含引用类型的字段,那么这些字段在克隆后的对象中将仍然引用原始对象中的相同实例。MemberwiseClone方法创建一个当前对象的浅拷贝(shallow copy),它会复制对象的所有字段到新的对象上,但是如果字段是引用类型,则复制的只是引用,而不是引用的对象本身。因此,对于引用类型的字段,原始对象和克隆后的对象将共享相同的引用。
2024-04-19 19:32:51 507
原创 System.ComponentModel.DataAnnotations 使用介绍
RequiredAttribute:确保数据字段的值是必须的,不能为null或空。KeyAttribute:标识一个属性作为实体的主键。MaxLengthAttribute 和 MinLengthAttribute:定义字符串属性的最大和最小长度。StringLengthAttribute:同时定义字符串属性的最大和最小长度。RegularExpressionAttribute:用于验证属性值是否符合指定的正则表达式。RangeAttribute:用于验证数值属性是否在指定的范围内。
2024-04-08 22:09:35 1046
原创 属性显示到表格和获取
C#对当前类中只对某特性的属性,把属性的名称、类型和值显示到表格中,并且根据不同数据类型对应不同的单元格类型,同时这些值可以在表格中修改,再从表中中读取数据到属性中。
2024-03-25 19:28:03 429
FlowChart绘制流程图
2024-05-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人