刷新
TopShelf创建服务

TopShelf创建Windows服务 安装NuGet包TopShelf 如图1-1所示,先安装TopShelf的NuGet包; 图1-1 创建服务类 如图1-2所示,创建一个ServiceManager服务类,并创建了两个方法,分别为Start和Stop方法,分别在服务启动和停止时调用; 图2-1 ...

C#邮件发送

C#基于SMTP的邮件发送 准备工作 注册邮箱 首先我们需要注册一个作为发送邮件的邮箱,这一步可以直接进入网易邮箱官网进行注册, 注册地址:https://mail.163.com/ 这里我们可以选择【快速注册】和【普通注册】,如图1-1所示,这里我选择的普通注册; 图1-1 登录邮箱 注册完成之后 ...

基于Basic auth 的一个C# 示例

博主头像 最近在做公司的一个项目时,客户需要我们定时获取他们矩阵系统的数据。在与客户进行对接时,提到他们的接口使用的目前不常用的BASIC 认证。天呢,它好不安全,容易被不法人监听,咋还在使用呀。但是没办法呀,谁让客户的系统就是这样的呢。因为现在开发中绝大多数使用的是基于Bearer 认证的。 1、研究 1. ...

C# 继承、多态性、抽象和接口详解:从入门到精通

博主头像 C# 继承 在 C# 中,可以将字段和方法从一个类继承到另一个类。我们将“继承概念”分为两类: 派生类(子类) - 从另一个类继承的类 基类(父类) - 被继承的类 要从一个类继承,使用 : 符号。 在以下示例中,Car 类(子类)继承了 Vehicle 类(父类)的字段和方法: 示例 class ...

OpenCvSharp打造智能考勤系统,实现高效人脸录入和精准考勤识别

博主头像 概述:该考勤系统基于OpenCV和OpenCvSharp实现,包含员工人脸录入和上下班考勤人脸识别。员工人脸特征通过ORB方法提取并存储,考勤时通过相似度计算识别员工。系统灵活、可扩展,提高考勤效率,确保准确性。 实现基于OpenCV和OpenCvSharp的考勤系统,包括员工人脸录入和上下班考勤人 ...

记一次 .NET某工控自动化系统 崩溃分析

博主头像 一:背景 1. 讲故事 前些天微信上有位朋友找到我,说他的程序偶发崩溃,分析了个把星期也没找到问题,耗费了不少人力物力,让我能不能帮他看一下,给我申请了经费,哈哈,遇到这样的朋友就是爽快,刚好周二晚上给调试训练营的朋友分享 GC标记阶段 相关知识,而这个dump所展示的问题是对这块知识的一个很好的巩 ...

被Null条件运算符摆了一道

博主头像 C#6.0引入了Null条件运算符: obj?.Invoke(); 等价于 if(obj != null) obj.Invoke(); 即遇到null时短路。 于是,我不假思索地写下了这样的代码:① await obj?.InvokeAsync(); 遇到null时短路嘛,我以为是等价于这样:② i ...

物联网浏览器(IoTBrowser)-顶尖OS2电子秤协议实现

博主头像 本教程基于 物联网浏览器(IoTBrowser)-Web串口自定义开发 ,详细的过程可以翻看之前的文章。 本篇以实现顶尖OS2系列电子秤协议对接,并集成到IoTBrowser平台。由于没有找到OS2协议的官方文档,用串口助手抓包分析了一下,简单封装了一下实现代码有点潦草。 所有的串口或者需要实时数据 ...

C# 面向对象编程解析:优势、类和对象、类成员详解

博主头像 C# - 什么是面向对象编程? OOP代表面向对象编程。 过程式编程涉及编写执行数据操作的过程或方法,而面向对象编程涉及创建包含数据和方法的对象。 面向对象编程相对于过程式编程具有几个优势: OOP执行速度更快,更容易执行 OOP为程序提供了清晰的结构 OOP有助于保持C#代码DRY("不要重复自己 ...

C# AsyncLocal 是如何实现 Thread 间传值

博主头像 一:背景 1. 讲故事 这个问题的由来是在.NET高级调试训练营第十期分享ThreadStatic底层玩法的时候,有朋友提出了AsyncLocal是如何实现的,虽然做了口头上的表述,但总还是会不具体,所以觉得有必要用文字+图表的方式来系统的说一下这个问题。 二:AsyncLocal 线程间传值 1. ...

WinDbg学习三(字符串通配符语法)

博主头像 说明 星号(*) 代表零个或多个字符。 问号(?) 代表任意单个字符。 包含字符列表的方括号( [ ] ) 代表列表中的任何单个字符。 恰好匹配列表中的一个字符。 在这些括号内,您可以使用连字符 (-) 指定范围。 例如,Prog[er-t7]am 匹配“Progeam”、“Program”、“Pr ...

物联网浏览器(IoTBrowser)-Web串口自定义开发

博主头像 物联网浏览器(IoTBrowser)-Web串口自定义开发 工控系统中绝大部分硬件使用串口通讯,不论是原始串口通讯协议还是基于串口的Modbus-RTU协议,在代码成面都是使用System.IO.Ports.SerialPort开发,常用的函数包括打开串口、关闭、接收数据、写入(发送)数据。IoTB ...

C# 语言笔记

博主头像 1. C# 初识 因为先前已经学过 C++ 了,所以在C# 的学习中,大多只记录和 C++ 不同的点,在学习的过程中,感谢刘铁猛老师的教程,您是我C# 入门的领路人。 1.1 使用 .net cli 1.1.1 使用 VSCode 创建 C# 工程 先安装 C# 相关插件 创建新工程 dotnet ...

C# 方法详解:定义、调用、参数、默认值、返回值、命名参数、方法重载全解析

博主头像 C# Methods 方法是一段代码,只有在调用时才会运行。 您可以将数据(称为参数)传递给方法。 方法用于执行某些操作,也被称为函数。 为什么使用方法?为了重用代码:定义一次代码,然后多次使用。 创建一个方法 方法的定义以方法的名称开头,后跟括号()。C#提供了一些预定义的方法,您已经熟悉,例如 ...

WinDbg学习二(符号)

博主头像 在开始使用WinDbg之前,我们需要设置一下符号。 简介 符号文件包含大量的数据,比如全局变量,局部变量,源行号,这些数据在运行二进制文件时实际上并不需要,但在调试过程中很有用,比如我们写.net程序时生成的PDB文件。 符号可以包括名称、类型(如果适用)、存储地址或寄存器以及任何父符号或子符号。 ...

C#析构函数解析:资源管理的精要和使用技巧

博主头像 在C#中,析构函数(Destructor)是一个特殊的方法,用于清理对象占用的资源。它是由垃圾回收器在对象被销毁时自动调用的。析构函数的原理是在对象即将被回收时执行一些清理操作,例如释放非托管资源或执行一些对象销毁前的必要操作。 析构函数的基本原理: 调用时机: 当对象被垃圾回收器回收时,析构函数会 ...

C# 线程本地存储 为什么线程间值不一样

博主头像 一:背景 1. 讲故事 有朋友在微信里面问我,为什么用 ThreadStatic 标记的字段,只有第一个线程拿到了初始值,其他线程都是默认值,让我能不能帮他解答一下,尼玛,我也不是神仙什么都懂,既然问了,那我试着帮他解答一下,也给后面类似疑问的朋友解个惑吧。 二:为什么值不一样 1. 问题复现 为了 ...

<1···131415···22>