自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(73)
  • 资源 (3)
  • 问答 (1)
  • 收藏
  • 关注

原创 观察者模式在C#实际应用中的使用:PLC数据监控

观察者模式是一种设计模式,它定义了对象之间的依赖关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都会被自动通知并更新。在这个模式中,发生状态改变的对象被称为主题,依赖于主题的对象被称为观察者。观察者模式是一种非常实用的设计模式,它可以帮助我们在设计复杂的系统时保持代码的清晰和可维护。在这篇文章中,我们通过一个具体的例子了解了如何在 .NET 程序中实现观察者模式。希望这篇文章能帮助你理解观察者模式,并在你自己的代码中使用它。

2024-09-26 09:13:04 519

原创 事件.BeginInvoke报错:Operation is not supported on this platform

在.NET Core和.NET 5或更高版本中,和EndInvoke方法已经不再被支持,但我们可以使用Task类来进行异步操作,提高应用程序的响应性。希望这篇文章能帮助你在面对“Operation is not supported on this platform”错误时,有更好的解决方案。如果你对这个主题感兴趣,或者有任何疑问或建议,欢迎在评论区留言。让我们一起学习和进步!

2024-09-14 10:26:43 553

原创 使用Serilog在.NET应用程序中写日志文件

Serilog是一个用于.NET应用程序的结构化日志记录库。与传统的文本日志记录不同,结构化日志记录允许你记录结构化的数据,这使得日志分析和查询更加方便。Serilog提供了丰富的日志级别,日志过滤,以及多种日志输出方式(称为"sink")。

2024-09-14 09:18:11 551

原创 自定义WPF滑块样式-Slider

滑动过的部分(DecreaseRepeatButton)是一个蓝色的矩形(Rectangle)。未滑动过的部分(IncreaseRepeatButton)是一个透明的矩形(Rectangle)。这样,我们就得到了一个自定义样式的滑块:滑动过的部分是蓝色的,滑块本身是一个白色的圆形,滑块的背景是灰色的,未滑动过的部分是透明的,而且滑块只能在刻度上移动,不能在刻度之间移动。滑块的当前值会显示在滑块的右侧。这就是XAML的艺术,通过自定义样式,我们可以改变控件的外观和行为,使其更符合我们的设计需求。

2024-09-13 13:03:07 918

原创 上位机系统架构 | 如何设计一个高效的多相机管理系统

通过这种设计,我们可以方便地控制和管理多个相机设备,而无需为每个设备编写单独的代码。此外,我们还可以利用事件和异步操作来提高应用程序的响应性,以及使用抽象类和接口来方便地扩展和修改代码。希望这篇文章能帮助你更好地理解如何设计一个高效的多相机管理系统。如果你对这个主题感兴趣,或者有任何疑问或建议,欢迎在评论区留言。让我们一起学习和进步!

2024-09-13 10:15:53 571

原创 基于HslCommunication通讯库S7协议+MVVM的简单调用

背景:HslCommunication测试工具,作为S7的服务端,本机作为客户端。实现简单的连接、断开连接、读、写、实时读以及日志显示的功能,本Demo涉及MVVM框架。依赖项:HslCommunication.dll。

2024-07-25 16:12:15 359

原创 关于海康威视+WPF+MVVM实时取图代码整理

背景:使用自定义WPF控件显示图片,通过实现INotifyPropertyChanged接口,实现PropertyChanged事件,修改图像控件的显示值。这段代码是一个WPF应用程序的一部分,主要用于处理和显示从相机捕获的图像。然后设置触发模式为off,设置了图像节点数量,注册了回调函数,并开始抓图。在构造函数中,它初始化了一些变量,启动了一个接收线程用于处理和显示图像,并调用了。函数是图像抓取的回调函数,每当新的图像被抓取时,它会被调用,并将新的图像帧添加到。函数用于获取相机的设置,

2024-07-23 09:32:48 998

原创 基于HandyControl实现侧边菜单动态加载TabItem的功能

SideMenu` 和 `TabControl` 是分别放在 `Grid` 的两个列中的。5. **显示 `TabItem` 的内容**:你在 `MainWindow.xaml` 文件中为 `TabControl` 定义了 `ContentTemplate`,用于显示 `TabItem` 的内容。7. **动态创建 `TabItem` 的内容**:在 `SelectCmd` 命令的实现中,根据 `SideMenuItem` 的 `Name` 动态创建了 `TabItem` 的内容。

2024-06-25 17:14:27 1217

原创 HandyControl的属性编辑器如何绑定自定义控件,并集成到自定义编辑器

1.CategoryAttribute:这个特性用于将属性分组到特定的类别中。在PropertyGrid控件中,类似的属性可以被组织在一起。例如,你可以使用`[Category("Appearance")]`来指示属性应该在"Appearance"类别下显示。2.BrowsableAttribute:这个特性用于控制属性是否应PropertyGrid控件中显示。如果你设置`[Browsable(false)]`,该属性将不会在属性浏览器中显示。

2024-06-05 17:26:30 1301

原创 HandyControl的属性编辑器的入门使用

以Nuget的方式引用控件库。

2024-06-05 16:55:44 400

原创 视觉基础知识之通道

彩色图像通常使用RGB模式,有三个通道:红色(R),绿色(G),和蓝色(B)。例如,(255, 0, 0)表示红色,(0, 255, 0)表示绿色,(0, 0, 255)表示蓝色,(255, 255, 255)表示白色,(0, 0, 0)表示黑色。在灰度图像中,每个像素的值通常在0(黑色)到255(白色)之间变化,其中间的值表示不同的灰度。有些彩色图像还有一个额外的通道,通常被称为alpha通道,用于表示像素的透明度。所以,简单来说,灰度图像只有一个通道,而彩色图像有三个(RGB)或四个(RGBA)通道。

2024-02-23 14:36:20 680 1

原创 WPF之DataGrid的DataGridTemplateColumn内的Checkbox改变状态后不触发OnPropertyChanged

【代码】WPF之DataGrid的DataGridTemplateColumn内的Checkbox改变状态后不触发OnPropertyChanged。

2024-01-25 11:20:11 720

原创 WPF之鼠标快速移动进出Textbox导致联动的控件显示卡顿解决方案

防抖和节流是两种常用的控制函数调用频率的技术,防抖是将多次执行变为最后一次执行,节流是将多次执行变为在规定时间内只执行一次。这两种技术可以减少在短时间内产生大量的事件处理器调用,从而提高应用的性能。事件处理器在处理事件时需要进行复杂的计算或者I/O操作,你可以考虑使用异步编程来避免阻塞UI线程。但是请注意,你不能在非UI线程中直接修改UI元素的属性,你需要使用。虚拟化可以减少在任何给定时间需要渲染的元素的数量,从而提高应用的性能。:如果你的数据绑定是造成卡顿的原因,你可以考虑优化你的数据绑定。

2024-01-25 09:45:08 704

原创 计算机视觉的基本概念和技术有哪些?

光流和运动估计:这是估计图像序列中物体运动的过程,例如使用Lucas-Kanade方法和Horn-Schunck方法。以上只是计算机视觉的一部分概念和技术,实际上计算机视觉是一个非常广泛和深入的领域,还包括许多其他的概念和技术。目标检测和识别:这是识别图像中特定对象的过程,例如使用Haar级联、R-CNN、YOLO等技术。图像处理:这是计算机视觉的基础,包括图像的基本操作,如滤波、边缘检测、色彩空间转换等。场景理解:这是理解图像中的场景,包括场景分类、场景分割和场景解析。

2023-11-17 13:46:49 669

原创 wpf自定义控件-单/双箭头线

【代码】wpf自定义控件-单/双箭头线。

2023-07-27 16:18:37 1270

原创 WPF-如何调用其他项目的通用控件样式

公司要求设计软件时风格一致,在开发中,如果要求每个员工这样做,无疑是重复造轮子,降低开发效率。所以形成简单、基础、统一的WPF控件库,给开发同事调用,非常有必要。我们从github上download一份开源代码,经过一段时间的改造,目前支持文本框、按钮、单选框、下拉框、选项卡...今天开始尝试投入业务开发中。那么,如何在业务代码的框架中调用这套基础的样式库呢?添加样式库生成的dll引用App.xaml指定资源字典。

2023-02-16 15:53:32 904

原创 FtpWebRequest实战总结

Ftp通过网络传输,用流文件的方式上传,特别在验证路径时,通过拆分每一级目录,对每级目录上传和删除的操作,增加网络和IO的消耗,操作FTP服务器频率高导致的偶尔失败。最简单并且能马上解决问题的办法是封装上方循环目录的部分代码,在try和catch里分别调用一次,可减少该问题发生的概率。我使用的第二种方式,本地测试过程是没有问题的。但没有考虑到现场复杂性,整个流程单次进行能正常运行,流程一个接一个时,这里就报错,导致图片上传老是漏几张。上传图片前需验证当前路径,如果不存在,要创建路径后再写入流文件。

2023-02-15 10:04:38 965

转载 C# winform 屏蔽鼠标右键小技巧

4. 你可以将Application.AddMessageFilter()放到任何你想起作用的地方,也随时可以Application.RemoveMessageFilter(this)2.在构造函数中添加:Application.AddMessageFilter(this);1.先让窗体类继承IMessageFilter接口。//不响应鼠标右键消息。按步骤即可成功屏蔽。...

2022-08-29 09:31:58 1553

原创 在.netCore里使用SqlSugar调用mysql存储过程

存储过程脚本:CREATE DEFINER=`root`@`%` PROCEDURE `CalcCompletionPercentByItem`(IN `pitemId` varchar(50),out `c` decimal(15,2))label:BEGIN declare taskcnt int; declare FinishedCnt int; set taskcnt=(select count(1) from itemtask where ItemId=pitem

2021-10-15 15:22:08 1716

原创 英文溢出屏幕问题

div常规情况可通过指定宽高、overflow属性控制文字溢出原本空间宽度问题。英文例外,原因是CSS word-break 默认值:object.style.wordBreak="keep-all"、normal 使用浏览器默认的换行规则。 break-all 允许在单词内换行。 keep-all 只能在半角空格或连字符处换行。 所以单独加上属性:work-break:beak-all即可...

2021-08-27 16:31:05 207

原创 sql之char和varchar、nvarchar区别

char:固定大小字符串数据,字符串长度8000,占用空间nnchar:固定大小字符串数据,字符串长度4000,存储大小为 n 字节的两倍varchar:可变大小字符串数据,字符串长度可以是8000,max最大是2G。占用空间n+2当varchar(max)长度<8000时,存储机制跟常规varchar一样。当存储字符长度>8000时,存储机制和text一样。nvarchar:可变大小字符串数据,字符串长度4000,存储大小为 n 字节的两倍 + 2 个字节...

2020-12-15 11:35:10 439

原创 面向对象设计基本原则之接口隔离原则

接口隔离原则,Interface Segregation Principle,简称 ISP定义:1.客户端不应该依赖它不需要的接口2.类间的依赖关系应该建立在最小的接口上通俗点讲:接口尽量细化。指每个模块有专门的接口,几个模块就应该有几个接口,而不是一个庞大臃肿的接口,容纳所有的客户端访问。...

2020-12-07 17:18:15 149

原创 开启多线程的四种方式

Thread类1.TreadStart方法,无入参 int arg1 = 10; string arg2 = "argument temp"; Thread t1 = new Thread(new ThreadStart( delegate { Console.WriteLine(arg1.ToString() + ar

2020-12-07 15:55:53 2388

原创 MVC解决跨域

中心思想:在响应头里指定Access-Control-Allow-Origin,实现方式1:引用包WebApi.Cors。通过在配置中添加或在Controller或在Action上添加特性EnableCors来实现实现方式2:1,在web.config文件中的 system.webServer 节点下 增加如下配置<httpProtocol> <customHeaders> <add name="Ac

2020-12-04 11:06:14 403

原创 Nginx之负载均衡算法初感

Nginx其中一大特性是负载均衡,通过对服务器的反向代理,实现高并发高可用。upstream模块能使用3种负载均衡算法:1.轮询rountd-robin:轮询算法是基于在队列中谁是下一个的原理确保将访问量均匀地分配给每一个上游服务器的。2.IP哈希ip_hash:同一个ip地址池的地址总说被映射到同一个上游服务器。这个机制目的不是要确保公平分配给每个一个上游服务器,而是在客户端和上游服务器之间实现一种映射。应用在具有会员的程序中3.最少连接数least connection:通过选择一.

2020-12-04 10:25:58 118

原创 面试提问之GET和POST两种基本请求方法的区别

GET和POST是什么?HTTP协议中的两种发送请求的方法。HTTP是什么?HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议。HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP。GET和POST本质上就是TCP连接,并无差别。1.由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。2.GET产生一个TCP数据包;POST产生两个TCP数据包。对于GET方式的请求,浏览器会把http header和d...

2020-12-04 10:19:37 208

原创 C#Redis之二感

Redis 特性:1.基于内存运行,性能搞笑2.支持分布式,可无限拓展3.key-value存储系统4.开源,并提供多种语言的api相比较于其他数据库类型,redis具备特点是1.C/S通讯模型2.单进程单线程模型3.丰富的数据类型4.操作具有原子性5.持久化6.高并发读写应用场景:计算器/限速器,利用redis原子性自增操作,可统计类似用户点赞数、用户访问数等操作好友关系,利用集合命令求交集、并集、差集等。可以方便搞定共同好友、共同爱好之..

2020-11-25 13:40:43 124

原创 EntityFramework实现分页技巧

大纲:Take()方法的作用是从查询结果中提取前n个结果;而Skip()方法则是跳过前n个结果,返回剩余的结果

2020-11-24 17:34:11 217

原创 设计模式之策略模式初感

策略模式(Strategy Pattern),也叫做政策模式(Policy Pattern)。策略模式使用的是面向对象的继承和多态机制,分为三个角色1.Context封装角色也叫做上下文角色,起承上启下封装左右,屏蔽高层模块对策略、算法的直接访问,封装可能存在的变化2.Strategy抽象策略角色策略、算法家族的抽象,通常为接口,定义每个策略或算法必须具有的方法和属性。3.ConcreteStrategy具体策略角色实现抽象策略中的操作,该类具有具体的算法。优点:1.

2020-11-23 17:34:25 106

原创 .net core之认证

一般在应用程序中,安全分为前后两个步骤:验证和授权验证:负责检查当前请求者的身份;授权:根据验证得到的身份决定当前请求者是否能够访问期待的资源。验证包含3个操作:1.Authenticate验证 验证操作负责基于当前请求的上下文,使用来自请求中的信息,例如请求头、Cooke等等来构造用户标识。构建的结果是一个AuthenticateResult对象,它指示了验证是否成功,如果成功的话,用户标识将可在验证票据中找到。 常见的验证包括: a.基于Cookie的验证,从请求的...

2020-11-23 16:31:13 564

原创 .net core之内存缓存

IMemoryCache和IDistributedCache用于缓存的内置机制,所有其他技术都是从这两个接口实现。其中IMemoryCache将被用于告诉缓存的基础,却不是唯一可用于缓存的办法,存在拓展各种丰富的api并极大地促进其作用缓存API:使用IMemoryCache存储和检索项目,要使用Set()方法写入方法,从缓存中检索对象使用Get()方法。如果不确定缓存中是否存在特定的密钥,则可以使用TryGetValue()提前判断,返会布尔值。另一种方法GetOnCreate()方法验证所需

2020-11-20 14:53:01 533

原创 面向对象设计基本原则之依赖倒置原则

依赖倒置原则,Dependence Inversion Principle,简称 DIP含义:1.高层模块不应该依赖低层模块,两者都应该依赖其对象;2.抽象不应该依赖细节;3.细节应该依赖抽象;在JAVA语言中的表现是:1.模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的;2.接口或抽象类不依赖于实现类;3.实现类依赖接口或抽象类。更加精简的定义就算“面向接口编程”------OOD(Object-Oriented ..

2020-11-19 17:42:26 179

原创 面向对象设计基本原则之里氏替换原则

里式替换原则,Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.(所有引用基类的地方必须能透明地使用其子类的对象。),简称LSP原则规范:1.子类必须完全实现父类的方法注意:在父类调用其他类时务必要使用父类或接口,如果不能使用父类或接口,则说明类的设计已经违背了LSP原则;如果子类不能完整地.

2020-11-17 13:56:39 149

原创 C#线程之同步上下文

SynchronizationContext:提供在各种同步模型中传播同步上下文的基本功能就是对当前线程上下文的封装,或者叫当前线程所在环境的封装。封装的对象可以传递至其他线程,然后在其他线程中调用其post或send方法,以此来实现线程间的消息传播。我们知道,异步方法在遇到await之前都在当前线程中执行,当执行完await这行后,方法就会退出,然后会将await之后的代码封装成委托另外,Task对象有一个ConfigureAwait方法,用来配置是否同步上下文。尝试将延续任务封送回原始上下文

2020-11-17 11:04:44 1120

原创 C#Redis之初感

Redis是一种非关系型数据库(关系型数据库即SQL sqlserver,my sql 等),但多用于缓存技术,因为它是一种内存缓存数据库,存储数据的方式为key-value,即键值对,而且支持多种数据类型,如:string、list、set、zset、hash。特点:1.redis以内存作为存储的介质,读写效率极高,远超过数据库2.redis存储的数据是持久化的,不会因为断电重启造成的数据丢失。因为redis的存储分为内存存储,磁盘存储和log文件三部分。重启后,redis从磁盘重...

2020-11-16 13:31:21 133

原创 .Net性能调优思路

1.空间换时间缓存就是典型的例子,将数据额外存储一份,下次直接重用,空间换时间。2.时间换空间大文件处理时,切分数据分批次处理,花更多时间,用更少时间完成处理3.分治思想典型的归并排序、快排、都是将数据分成小块排序最终再合并,分而治之4.异步化各种消息队列就是典型的案例,将业务分拆,避免阻塞,提升吞吐量5.并行包括多线程和单线程多进程两种模式,就是将任务分开,同时执行以加快速度6.集群化提供良好的扩展能力,更多的资源换区更好的性能...

2020-11-06 17:44:59 273

原创 面向对象设计基本原则之单一职责原则

单一职责原则,Single Responsibility Principle,简称SRP。其定义是一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。单一职责原则是实现高内聚低耦合的知道方针,是最简单却最难运用的原则,需要设计人员发现类的不同职责并将其分离优点:1.类的复杂性降低,实现什么职责都有清晰明确的定义2.可读性提高,复杂性降低3.可维护性提高,可读性提高4.变更引起的风险降低,变更是必不可少的,如果接口的单一职责做得好,一个接口将修改只对相应的实..

2020-10-29 14:54:01 298

转载 架构之RESTful

REST全称是Representtational State Transfer,意思是表现层状态转化REST是一种软件架构风格,它本身并没有创建新的技术、组件或者服务。使用web的现有特征和能力,增加一些约束和准则。这里描述的REST也是通过HTTP实现的REST1.1 资源在REST中最重要的一个概念就是资源。在面向对象的世界里,我们提倡万物皆对象,而在REST的世界里则是万物皆资源。所谓“资源”,就是网络上的一个实体,或者说是网络上的一个具体信息。1.2 表现层“资源”是一种信息实体

2020-10-19 10:56:37 231

转载 .net core之IOC初感

概念1.什么是IOCInversion of control即控制反转,一种设计思想,也是一个目标。有两个优点:解耦;屏蔽对象的实现细节。2.什么是DI全称为:Dependency Injection,由容器动态的将某个依赖的关系注入到组件之中。容器创建好实例后再注入调用者称为依赖注入。3.IOC和DI的联系IOC是一种设计思想,DI是实现的技术。谁依赖谁:应用程序依赖于IOC容器;为什么需要依赖:应用程序需要IOC容器来提供对象需要的外部资源;谁注入谁:IOC容器注入.

2020-10-16 16:01:03 210

原创 C#基础之集合初感

控制反转:调用者将创建实例的控制器交给IOC容器,由容器创建,称之为控制反转依赖注入:容器创建好实例后再注入给调用者的过程称为依赖注入。依赖注入技术让我们的应用程序实现了松散耦合。...

2020-10-15 16:40:18 100

HandyControl的属性编辑器如何绑定自定义控件,并集成到自定义编辑器

https://blog.csdn.net/shanshan2099/article/details/139477607 这个文章的demo,能运行,并且能看到运行效果。

2024-06-06

DES加密解密源码

Des加密和解密源码,用VS2012写的

2014-04-02

Telerik控件初级学习笔记

主要是本人学习telerik控件时写的一些总结和心得,包含代码和解释。

2013-09-18

js实现图片轮播效果

js实现图片轮播效果 不错的资源,大家可以下载看看

2013-09-18

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

TA关注的人

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