自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

星河队长

咿呀咿呀呦

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

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

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

原创 NET web api 上传下载

web api中实现 上传和下载。编程环境:VS2022框架:NET6.0。

2024-06-25 12:22:44 312

原创 ASP.Net.WebAPI和工具PostMan

WebAPI 是一种传统的方式,用于构建和暴露 RESTUI风格的Web服务。它提供了丰富的功能和灵活性,可以处理各种HTTP请求,并支持各种数据格式,如JSON、XML等。WebAPI使用控制器(Controllers)和动作方法(ActionMethods)的概念、通过路由配置将请求映射到相应的方法上。开发人员可以使用各种属性和过滤器来处理请求、控制访问权限、验证数据等。Postman是一款API测试和开发环境的软件,旨在简化API开发过程、测试和文档编制。

2024-06-24 00:02:04 1095

原创 C#部分方法有什么用处?和传统方法有什么区别?什么时候用合适?

在C#中,部分类(partial class)和部分方法(partial method)是两个不同的概念,但它们经常一起使用,特别是在代码生成和框架设计中。下面我将分别解释这两个概念,并讨论它们的用处、与传统方法的区别以及何时使用它们。

2024-06-18 14:35:37 1027

转载 跨线程通讯/操作UI-Invoke或者BeginInvoke的区别

Invoke,它和BeginInvoke有什么区别在Invoke或者BeginInvoke的使用中无一例外地使用了委托Delegate。为什么用他们?

2024-06-15 23:11:02 35

原创 AForge.NET介绍

丰富的文档和示例:虽然不是每个方法都有详细的文档,但主要的模块都有足够的信息供开发者参考,并且提供了Image Processing Prototyper和AForge.NET Debugging Visualizers等开发工具。总的来说,AForge.NET是一个功能全面、易于使用和扩展的开源计算机视觉和机器学习库,适用于各种涉及图像处理、计算机视觉、人工智能等领域的开发任务。提供了一些机器人的工具类库,帮助开发者进行机器人控制和编程。提供了用于遗传计算的接口和类,支持优化、近似等问题的解决。

2024-06-13 17:03:13 298

原创 常见日志库NLog、log4net、Serilog和Microsoft.Extensions.Logging介绍和区别

在C#中,日志库的选择主要取决于项目的具体需求,包括性能、易用性、可扩展性等因素。以下是关于NLog、log4net、Serilog和Microsoft.Extensions.Logging的基本介绍和使用示例。

2024-06-11 21:11:43 746

原创 图像拼接和切割

【代码】图像拼接和切割。

2024-06-10 22:17:53 191

原创 视觉平面简易三点标定

如果只通过三个点来建立转换关系,通常我们考虑的是二维平面上的仿射变换,而不是相机标定中的三维空间变换。这意味着我们假设所有的测量点都位于同一个平面上,且相机也是平行于这个平面的。基于这样的假设,可以通过这三个点来计算一个2D仿射变换矩阵,然后利用这个矩阵将像素坐标转换为该平面上的机械坐标。来将任意像素坐标转换为相应的机械坐标。需要注意的是,由于是仿射变换,它只能在假设的平面上保持线性关系,对于非共面点或有透视失真的情况,这种方法可能不够精确。对于更复杂的场景,建议采用更全面的相机标定方法。

2024-06-10 22:14:06 371

原创 Task vs Thread

总结来说,Task是面向任务的并发模型,更适合现代C#应用开发,它在大多数情况下提供了一个更高效、更易用的并发解决方案。Task是对线程的进一步封装,提供了丰富的API来管理异步操作,如取消、延续任务、异常处理等。底层实现: 尽管Task是更高层次的抽象,但它在内部仍然可能使用Thread来执行任务,尤其是在没有其他更高效机制(如IO完成端口)可用的情况下。C#中的Task和Thread都是用于实现多线程和并发操作的重要组件,但它们在设计哲学、使用场景和功能特性上存在显著差异,同时也有一些内在的联系。

2024-06-10 19:14:52 215

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

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

原创 System.Collections.Generic 中的接口和类型区分

这些接口定义了一组通用的集合行为,而具体的实现(如 List、Dictionary 等)则遵循这些接口,从而提供具体的集合功能。这些集合是强类型的,也就是说,你可以指定集合中的元素类型,这在编译时提供了类型安全性。继承自 IEnumerable,表示一个包含元素的泛型集合,这些元素是强类型的,并提供了对集合中元素数量的访问以及添加、删除和清空集合成员的方法。继承自 ICollection,表示一个有序的集合,可以通过索引访问元素,并且支持在集合中的特定位置插入和删除元素。

2024-05-25 09:54:07 475

转载 事件和委托应用和区别

一个广为流传的错误说法:事件是一种特殊的委托希望看完这个例子你能理解事件的意义,事件与委托的关系,以及上面那句话为什么不合理假设你有一个公司,你有10名员工,1000元的股票市值,公司倒闭会造成裁员9人,市值蒸发900元。你会怎么写?

2024-05-24 23:42:32 93

原创 书籍推荐计算机相关

计算机程序的构造和解释》(Structure and Interpretation of Computer Programs):这本书被誉为“程序设计的圣经”,它对程序设计和计算机语言的设计有着深远的影响。《C程序设计语言》(The C Programming Language):这本书是C语言的经典之作,它简洁、清晰地介绍了C语言的设计理念和编程方法。《代码大全》(Code Complete):这本书是“优秀的编程实践的百科全书”,它详细讨论了如何编写高质量、可维护的代码,是所有程序员的必读之作。

2024-05-21 13:42:17 355

原创 自动配置状态参数

请注意,在这个例子中,我假设了 XML 文件的格式,并且根据这个格式编写了相应的加载逻辑。此外,由于 Stateless 库的 StateMachine 类在配置时通常是链式的,所以我在 Load 方法中直接进行了配置。对于触发事件,你通常不需要在 XML 中明确列出它们,因为你可以在定义转移时隐式地定义它们。在使用 Stateless 开源库时,你可以通过 XML 文件来定义状态机的状态、转移和触发事件,并编写代码来读取 XML 文件并自动配置 Stateless 状态机。

2024-05-17 18:51:43 242

原创 状态机不同特性使用举例(使用stateless)

/ 设置状态进入和离开时的动作.OnEntry(() => Console.WriteLine("开始浏览商品")).OnExit(() => Console.WriteLine("浏览商品结束"));.SubstateOf(State.Browsing) // 继承自Browsing状态.OnEntry(() => Console.WriteLine("商品已添加到购物车")).OnExit(() => Console.WriteLine("离开购物车"));

2024-05-17 18:42:57 290

原创 KeyValuePair和Dictionary和Tuple区别和应用

KeyValuePair是一个简单的键值对容器,而字典则是一个包含多个键值对的集合,提供了更强大的数据管理和访问功能。KeyValuePair是一个表示键值对的数据结构,由键(Key)和与之相关联的值(Value)组成。查找:Tuple 不支持基于元素的查找,而 Dictionary 支持快速的基于键的查找。键的唯一性:Dictionary 要求键是唯一的,而 Tuple 没有这样的要求。类型安全:Dictionary 的键和值都是类型安全的,即键和值都有明确的类型。它通常用于实现查找表、缓存和符号表等。

2024-05-16 14:12:44 461

原创 编程中有哪些工具和方法可以帮助开发者在开发过程中捕获和避免潜在的错误

当你在代码中放置这样的断言时,你实际上是在告诉编译器:“在调试模式下,我确信这个条件(在这里是 fsm!= null)必须为真。除了 Debug.Assert,还有其他断言库,如 NUnit、xUnit 和 MSTest,它们提供了更丰富的断言方法和更好的测试框架。在编程中,除了 Debug.Assert,还有一些类似的工具和方法可以帮助开发者在开发过程中捕获和避免潜在的错误。防御性编程:使用断言是防御性编程的一部分,它有助于在错误发生时立即捕获它们,而不是让它们潜伏在代码中,直到更晚的时候才导致问题。

2024-05-16 10:23:55 287

原创 ⚛⚖⚘一些特殊符号Unicode字符

字符“⚙”(U+2699)是一个Unicode字符,属于“补充符号和图片”(Supplemental Symbols and Pictographs)区块。特殊字体和排版:一些特殊的字体或排版设计中可能会包含这个字符,用于创建独特的视觉效果或表达特定的主题。聊天和社交媒体:在聊天应用或社交媒体平台上,用户可能会用它来表达与机械、工程或技术相关的概念或情感。⚚ 正交十字架(Orthodox Cross, U+269A)⚔ 交叉的剑(Crossed Swords, U+2694)

2024-05-16 09:09:45 221

原创 反射存取参数测试

【代码】反射存取参数测试。

2024-04-27 22:29:41 103

原创 简易状态机

它是一个基于Spring框架的状态机库,提供了基于注解的方式来定义状态和状态转换。Stateless是一个轻量级的.NET状态机库,它支持以声明式的方式定义状态机,并提供了一种简洁的API来触发事件和查询状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。这只是一个简单的状态机框架示例,你可以根据需要扩展它,比如添加更复杂的逻辑、状态继承、状态转换的守卫条件等。可以定义一个基础的State类来表示状态,以及一个StateMachine类来管理状态的转换。1现态:是指当前所处的状态。

2024-04-27 19:41:35 433

原创 System.Exception有哪些类型分别什么意思

这些子类可以根据异常的来源和性质进行分类,例如系统异常(System.SystemException)和应用异常(System.ApplicationException)。而应用异常则是由应用程序生成的错误。System.SystemException 类是 System.Exception 的一个直接子类,它表示由系统引发的异常。尽管在较新的.NET版本中,使用自定义异常类而不是 ApplicationException 更为普遍,但它在早期版本中确实被用作应用程序级异常的基类。

2024-04-25 15:43:37 802 1

原创 一个缓存泛型自动处理队列,留有处理事件接口

以下是一个简单的泛型缓存队列工具的示例,它使用了System.Collections.Concurrent命名空间下的BlockingCollection作为线程安全的队列,并通过Task在后台自动处理队列中的项。在C#中,创建一个通用泛型缓存队列工具通常涉及到使用泛型(T)来支持任意类型的队列项,并且实现先进先出(FIFO)的队列逻辑。为了提供自动处理和事件通知的功能,我们可以使用后台线程来处理队列中的项,并通过事件或委托来通知监听者队列的状态变化。

2024-04-24 15:27:39 459 1

原创 System.IO.Path应用说明

根据具体的文件和目录操作需求,你可能还需要使用其他方法,如 DirectorySeparatorChar 属性(返回当前操作系统使用的目录分隔符字符)和 AltDirectorySeparatorChar 属性(返回备用目录分隔符字符,在Windows中通常是 /)。在C#中,System.IO.Path 类提供了一组静态方法和属性,用于处理文件系统中的文件路径。// 例如 “oahgjdi.tmp”GetTempFileName: 在系统的临时文件夹中创建一个唯一的临时文件,并返回其完整路径。

2024-04-24 14:56:51 316

原创 一个快速克隆方法引出深浅拷贝说明

换句话说,它执行的是一个成员级的克隆,对于引用类型的字段,它复制的是引用本身,而不是引用的对象。需要注意的是,MemberwiseClone方法创建的是浅拷贝,这意味着如果对象包含引用类型的字段,那么这些字段在克隆后的对象中将仍然引用原始对象中的相同实例。MemberwiseClone方法创建一个当前对象的浅拷贝(shallow copy),它会复制对象的所有字段到新的对象上,但是如果字段是引用类型,则复制的只是引用,而不是引用的对象本身。因此,对于引用类型的字段,原始对象和克隆后的对象将共享相同的引用。

2024-04-19 19:32:51 419

原创 C#开源项目推荐

一些net开源项目推荐

2024-04-15 15:52:57 2004

原创 System.ComponentModel.DataAnnotations 使用介绍

RequiredAttribute:确保数据字段的值是必须的,不能为null或空。KeyAttribute:标识一个属性作为实体的主键。MaxLengthAttribute 和 MinLengthAttribute:定义字符串属性的最大和最小长度。StringLengthAttribute:同时定义字符串属性的最大和最小长度。RegularExpressionAttribute:用于验证属性值是否符合指定的正则表达式。RangeAttribute:用于验证数值属性是否在指定的范围内。

2024-04-08 22:09:35 869

原创 属性显示到表格和获取

C#对当前类中只对某特性的属性,把属性的名称、类型和值显示到表格中,并且根据不同数据类型对应不同的单元格类型,同时这些值可以在表格中修改,再从表中中读取数据到属性中。

2024-03-25 19:28:03 301

原创 特定特性的属性进行序列化存取

如果你想对当前类中的特定特性的属性进行序列化和反序列化,你可以通过自定义一个特性(Attribute)来标记这些属性,并在序列化和反序列化的过程中仅处理这些带有特定特性的属性。

2024-03-25 19:02:31 387

原创 VisionPro 9.0 64位下载地址

这些都是目前康耐视提供下载的VisionPro,如果你需要低版本如8.3请看:VisionPro8.3官方原版下载地址、Vision Pro8.2版官方原版下载无需加密狗。原文链接:https://blog.csdn.net/weixin_42105843/article/details/118298055。

2024-03-24 20:57:55 1365

原创 C# WinForms应用程序中,FileSystemWatcher使用监视文件系统更改

在C# WinForms应用程序中,FileSystemWatcher 类用于监视文件系统更改,例如文件的创建、删除、修改以及目录的更改。现在,当你运行WinForms应用程序时,FileSystemWatcher 将开始监视你指定的目录中的文件更改,并在触发相应的事件时显示消息框。你可以根据需要调整事件处理程序中的逻辑,比如将更改记录到日志文件中,而不是显示消息框。在窗体的构造函数或某个初始化方法中,创建 FileSystemWatcher 的实例,并设置其属性以监视特定的目录和文件类型。

2024-03-21 21:15:10 474

原创 EventWaitHandle 和 lock使用区别

在大多数情况下,对于简单的线程同步任务,lock 语句是足够且更易于使用的选择。然而,在需要跨进程同步或更复杂的同步逻辑时,EventWaitHandle 提供了更强大的功能。EventWaitHandle 和 lock 语句在 C# 中都是用于线程同步的机制,但它们之间有着显著的区别和不同的使用场景。性能:对于简单的线程同步任务,lock 通常比 EventWaitHandle 有更小的性能开销,因为它不涉及底层 Windows API 的调用。锁的范围是局部的,通常只覆盖需要同步的代码块。

2024-03-17 17:08:49 481

原创 wpf总结特点和控件通用属性

界面开发中winform开发应用程序比较方便快捷,但不够灵活,程序体积大,wpf可以解决这些问题,Windows Presentation Foundation (简称 WPF),WPF是微软Windows UI框架,.NET Framework 3.0的一部分。统一的编程模型、语言和框架,就象网页开发中的前后端分离,只不过WPF是应用于桌面窗体程序。

2024-03-05 10:48:59 927

原创 取消退出流程控制方法

在自动化设备动作流程中,认为任意想取消当前动作,常见方法是设置全局变量,实时监测变量设置决定退出。这里介绍一个System.Threading空间下的 CancellationTokenSource类,他可以设置超时,设置信息等封装。

2024-02-29 18:41:36 315

原创 C#WinForm窗体TableLayout控件布局

Winform界面TablLayout是常用的控件之一可以实现界面任意位置布局,在表格中添加其他控件默认只能占用一个单元格,如果想跨任意数量行列需要使用两个函数设置,下面举例。

2024-02-22 16:45:28 1634

原创 C#单元测试入门举例

单元测试是软件开发过程中的重要组成部分,它有助于确保代码的正确性,并在后续修改代码时提供回归测试的能力。为了测试Add方法,你可以创建一个名为CalculatorTests的测试类,并在其中编写一个或多个测试方法。在Visual Studio中,你可以通过右击测试项目中的Test菜单并选择Run All Tests来运行测试。测试结果将在测试资源管理器窗口中显示,指示每个测试是否通过。Act 阶段执行了被测试的方法(calculator.Add(a, b)),并将结果存储在result变量中。

2024-02-22 08:45:26 483

原创 程序小问-优先定义属性 而不是直接使用变量的主要原因?

通过将数据(属性)和操作数据的方法捆绑到一个类中,我们可以隐藏内部实现细节,并确保数据的正确性。只提供必要的方法来访问和修改属性,而不是直接操作变量,这有助于保护数据并减少错误。:通过将数据和操作数据的逻辑放在类中,我们可以创建可重用的组件。这意味着,如果你更改了类的内部工作方式(例如,如何计算某个属性的值),只需在类内部进行更改,而无需修改使用该类的所有代码。总的来说,定义属性而不是直接使用变量有助于提高代码的质量和可维护性,更好地组织和管理数据,以及提供更强大的工具来处理复杂的逻辑和状态管理。

2024-02-02 08:47:16 243

原创 内存分析实践-by dotmemory

小伙伴 发布软件后有可能遇到软件内存随着时间不断增加的异常,为了找到异常原因,需要内存分析工具进行检查,这里使用JetBrain 的dotMemory工具软件。如下图,工具软件在实时采集软件内存数据,点击右上角相机按钮可以生成当前内存数据,可以生成多数数据进行对比。VS软件扩展工具可以直接检索,或者百度到官网下载dotMemory软件。数据产生之后进入分析过程,首先显示的是下图整体信息。1 对当前电脑上正在运行的程序进行分析,如下图。2 选择软件位置,打开软件如图。3 软件开始内存分析。

2024-01-27 17:09:59 379

雷赛控制C#使用包含定位、插补运动等

雷赛控制C#使用包含定位、插补运动等

2024-06-11

计算机视觉+图片拼接+图片分割

计算机视觉+图片拼接+图片分割

2024-06-10

wpf练习基础-部分基本控件

wpf练习基础-部分基本控件

2024-05-26

FlowChart绘制流程图

用C#实现流程编辑绘制流程图 { "DisplayName": null, "Items": [ { "ID": "638544976020019204", "Type": "FlowChart.Models.RectangleComponent", "Text": "Process", "ConnectionIds": [ ], "Points": [ { "X": 70, "Y": 27 }, { "X": 322, "Y": 158 } ] }, {

2024-05-25

使用easyModbus库进行通讯举例控制驱动器

使用easyModbus库进行通讯举例控制驱动器

2024-05-22

vision工具包,用于康耐视

vision工具包,用于康耐视

2024-02-24

空空如也

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

TA关注的人

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