自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 资源 (92)
  • 收藏
  • 关注

原创 C#专用集合类StringCollection与StringDictionary

C#专用集合类命名空间:System.Collections.SpecializedSystem.Collections.Specialized命名空间包含专用的和强类型的集合。StringCollection和StringDictionary,两者都包含独占字符串的值。StringCollection 我们可以认为是类似于 List<String> 或者string[] 数组。StringDictionary 我们可以认为是类似于 Dictionary<stri...

2020-10-28 17:35:29 2311

原创 线程同步ManualResetEvent(手动复位事件)的阻塞 继续执行

ManualResetEvent 类命名空间:System.Threading表示线程同步事件,收到信号时,必须手动重置该事件。此类不能被继承(密封类sealed)。关键点:WaitOne():用于阻塞,触发WaitOne时,下面的代码将阻塞执行,就是等待执行,重载方法 可设置超时时间,默认-1(无限等待)Set():解除阻塞,WaitOne下面的将解除阻塞,继续执行。方法WaitOne() 阻止当前线程,直到当前WaitHandle收到信号。 (继...

2020-10-28 14:12:36 829

原创 System.Threading.Barrier多线程屏障类,分界线

Barrier:屏障,障碍,分界线使多个任务能够采用并行方式依据某种算法在多个阶段中协同工作。多个线程各自执行完毕,合并一起后再往下执行其他事件在Barrier之前,若干个thread各自执行,然后到了Barrier的时候停下,等待规定数目的所有的其他线程到达这个Barrier,之后再一起通过这个Barrier各自干自己的事情。比如:大家从各自的工位到会议室集合,待人数都到齐(Barrier)之后,开始会议并讨论问题。Task.WaitAll(Task1,Task2,Task3,....)

2020-10-26 22:36:18 268

原创 X509Certificate证书读取本地相应指纹证书

X509Certificate证书所在的命名空间System.Security.Cryptography.X509Certificates

2020-10-24 17:23:14 2523

原创 测试复制数组:Array.Copy与Buffer.BlockCopy的性能(运行时间)

数组元素复制可以使用两个方法: 1.Array.Copy(Array sourceArray, int sourceIndex, Array destinationArray, int destinationIndex, int length) 2.Buffer.BlockCopy(Array src, int srcOffset, Array dst, int dstOffset, int count)下面测试两者的性能新建控制台应用程序CopyArrayPerformance...

2020-10-22 16:39:58 867

原创 SuperSocket服务端源代码逻辑解析

SuperSocket服务端默认是以 "\r\n" (回车换行0x0D0A)作为终止符(TerminatorReceiveFilter),接收默认最多处理1024个字节【DefaultMaxRequestLength=1024】。如果一次发送超过1024的字节【发送数据中无 "\r\n"】,将抛出ProtocolError异常,并将非法的客户端连接关闭。接收的结果StringRequestInfo对象由Key和Body通过空格字符拼接而成。如果Body为空,则接收的实际结果就是 Key。如果Bo

2020-10-21 20:46:58 1012

原创 C#线程安全集合类说明(5):ConcurrentStack<T>栈

线程安全的集合所在的命名空间 using System.Collections.Concurrent;Concurrent意思是并发的,并行的。反义是sequential(顺序的),线程安全的意思就是多线程中的同步锁(Lock)

2020-10-17 17:32:50 925

原创 C#线程安全集合类说明(4):ConcurrentQueue<T>队列

线程安全的集合所在的命名空间 using System.Collections.Concurrent;Concurrent意思是并发的,并行的。反义是sequential(顺序的),线程安全的意思就是多线程中的同步锁(Lock)

2020-10-17 17:01:50 815

原创 C#线程安全集合类说明(3): ConcurrentDictionary<TKey,TValue>字典

线程安全的集合所在的命名空间 using System.Collections.Concurrent;Concurrent意思是并发的,并行的。反义是sequential(顺序的),线程安全的意思就是多线程中的同步锁(Lock)

2020-10-17 16:08:31 1421

原创 C#线程安全集合类说明(2): ConcurrentBag<T>

线程安全的集合所在的命名空间 using System.Collections.Concurrent;Concurrent意思是并发的,并行的。反义是sequential(顺序的),线程安全的意思就是多线程中的同步锁(相当于增加了lock或Interlocked)

2020-10-16 17:06:42 2617

原创 C#线程安全集合类说明(1): BlockingCollection<T>

线程安全的集合所在的命名空间 using System.Collections.Concurrent;相应的类:BlockingCollection<T>ConcurrentBag<T>ConcurrentDictionary<Tkey, TValue>ConcurrentQueue<T>ConcurrentStack<T>OrderablePartitioner<TSource>Partitioner.

2020-10-16 15:31:23 1419

原创 使用SpinWait来优化等待性能

System.Threading.SpinWait结构:为基于自旋的等待提供支持,可以比Sleep相应提升性能。以本人的博客 【使用通用接口与设备进行 串口(SerialPort)、网口(Socket)通信】为例,对发送命令并同步等待结果进行优化。原博客地址:使用通用接口与设备进行 串口(SerialPort)、网口(Socket)通信NetworkCommunication.cs的方法:发送命令并同步等待结果【SendAndWaitResult】函数。 /// <su...

2020-10-16 10:45:01 1843

原创 C#异步文件读写访问

可使用异步功能访问文件。通过使用异步功能,你可以调用异步方法而无需使用回调,也不需要跨多个方法或 lambda 表达式来拆分代码。若要使同步代码异步,只需调用异步方法而非同步方法,并向代码中添加几个关键字。可能出于以下原因向文件访问调用中添加异步:异步使 UI 应用程序响应速度更快,因为启动该操作的 UI 线程可以执行其他操作。如果 UI 线程必须执行耗时较长的代码(例如超过 50 毫秒),UI 可能会冻结,直到 I/O 完成,此时 UI 线程可以再次处理键盘和鼠标输入及其他事件。 异步可减...

2020-10-15 22:25:29 2586

原创 C# Async和Await异步任务

C#中可以使用异步方法,方法前加async关键字,可以返回void,Task,Task<TResult>.方法命名一般加上Async后缀,如WriteFileAsync在方法体中一般加上await用于耗时任务的返回值。一、测试程序如下:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;using System.T

2020-10-15 14:58:29 557

原创 C#使用ManagementObjectSearcher获取本计算机CPU,硬盘,内存条等相关设备信息

C#获取本操作系统显卡,CPU,硬盘等信息

2020-10-14 23:22:16 4448

原创 关于多线程Interlocked的使用

/// <summary> /// 标识量(缓冲区中已使用的空间,初始值为0) /// </summary> private static long numberOfUsedSpace = 0; static void Main(string[] args){//线程:写入者 Thread Writer = new Thread(delegate () { ...

2020-10-12 10:52:22 1278

原创 C#规范类库的注释,生成xml类库注释提示文件

当我们创建一个dll给其他人使用时,为了方便,增加合适的注释。右键 dll类库项目,选择 属性,切换到 “生成” 选项,在“输出”分组框里面 勾选 XML文档文件,即可。生成dll后,将同时生成一个xml注释文件。使用时,当使用对应的方法编写代码时,将会自动提示代码注释功能...

2020-10-09 17:47:56 1469

C#使用MQTT测试,客户端和服务端

C#使用MQTT测试

2024-09-04

C#使用GDI对一个图像Image进行任意角度旋转

C#使用GDI对一个图像Image进行任意角度旋转

2024-08-14

使用GDI画图片生成合成图片并调用打印机进行图片打印

使用GDI画图片生成合成图片并调用打印机进行图片打印

2024-02-06

使用netdxf(C#)框架实现dxf文件读取与导出坐标

使用netdxf(C#)框架实现dxf文件读取与导出坐标

2024-01-12

C#使用随机数模拟英雄联盟S13瑞士轮比赛

C#使用随机数模拟英雄联盟S13瑞士轮比赛

2023-11-05

获取中文词组的汉语拼音首字母拼接

GBK汉字拼音对照表

2023-09-17

SaveDefaultXmlConfigDemo.rar

C#读写应用程序配置文件App.exe.config,本质是xml文件的读写。 我们将配置文件的AppSettings节点和ConnectionStrings节点内容自动绑定到分组框控件GroupBox中,同时可以批量保存。

2022-06-29

C#使用GDI绘制九宫格

C#使用GDI绘制九宫格 DrawDiagramUtil.GenerateEightDiagramSymbol(panel8, "坎一", 2, Color.Green); DrawDiagramUtil.GenerateEightDiagramSymbol(panel3, "坤二", 0, Color.Red); DrawDiagramUtil.GenerateEightDiagramSymbol(panel4, "震三", 1, Color.Red); DrawDiagramUtil.GenerateEightDiagramSymbol(panel1, "巽四", 6, Color.Yellow); DrawDiagramUtil.GenerateFiveCenter(panel5, "中宫五"); DrawDiagramUtil.GenerateEightDiagramSymbol(panel9, "乾六", 7, Color.Green);

2022-05-24

九宫格与EightDiagram的画图GDI

九宫与方位 DrawDiagramUtil.GenerateEightDiagramSymbol(panel8, "坎一", 2, Color.Green); DrawDiagramUtil.GenerateEightDiagramSymbol(panel3, "坤二", 0, Color.Red); DrawDiagramUtil.GenerateEightDiagramSymbol(panel4, "震三", 1, Color.Red); DrawDiagramUtil.GenerateEightDiagramSymbol(panel1, "巽四", 6, Color.Yellow); DrawDiagramUtil.GenerateFiveCenter(panel5, "中宫五"); DrawDiagramUtil.GenerateEightDiagramSymbol(panel9, "乾六", 7, Color.Green);

2022-05-16

西西弗斯黑洞【123数字黑洞】 卡普雷卡尔黑洞(重排求差黑洞):三位数黑洞495

西西弗斯黑洞【123数字黑洞】 /// ​设定一个任意数字串,数出这个数中的偶数个数,奇数个数,及这个数中所包含的所有位数的总数 /// 比如86420135799,按照偶数个数5,奇数个数6,数字总个数11,拼接成一个新的整数 5611 /// 然后依次转化为134,然后转化为123结束 卡普雷卡尔黑洞(重排求差黑洞):三位数黑洞495 /// 三个0~9之间的数字【不能完全相同】组成的三位数的最大值 减去 最小值,获取一个【差值】新三位数(不够就补0) /// 对三位数继续计算最大值 和 最小值,最终差值(终结黑洞值)为495

2022-05-04

FixedDemo C# fixed

使用fixed指针修改内存的值,不能使用fixed关键字获取结构的地址, 坐标,fixed关键字不能获取已固定的表达式的地址 /// 因此fixed不能获取结构struct的地址

2022-04-04

使用循环【迭代】来进行转化数字为中文

/// <summary> /// 对【0000~9999】之间的数字进行迭代解析成中文 /// 类似于除基取余法 /// </summary> /// <param name="multiple">倍率</param> /// <param name="number">需要解析的数字</param> /// <returns></returns> private static string GetChinese(int multiple, int number) { if (number == 0) { return ChineseCollection[0].ToString(); } string chinese = string.Empty; int quotient = 0;//商

2022-03-25

NumberToChineseDemo

/// <summary> /// 数字与中文描述转化示例 /// </summary> public class NumberChineseTranslateUtil { /// <summary> /// 中文字符描述集合 /// 十索引为10 /// 百索引为11 /// 千索引为12 /// 万索引为13 /// 亿索引为14 /// </summary> static readonly char[] ChineseCollection = new char[] { '零', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十','百','千','万','亿' }; /// <summary> /// 数字转中文 /// 按照【个、十、百、千、万、亿】 /// 只考虑正整数和

2022-03-24

根据运算符的优先级,依次添加到堆栈中 /// 最终返回的列表不存在左右小括号,只有数字 以及 加减乘除运算符

StackCalculateUtil RecursionCalculateUtil 使用递归,计算含有小括号,加减乘除的表达式 /// 1.查找小括号,然后依次消去所有的小括号,此时表达式没有小括号 /// 2.进行乘除运算 /// 3.最后进行加减运算

2022-03-21

C#常见位操作 与或非 BitOperation

Console.WriteLine($"与(&)操作符的位都为1时,才为1,其他都为0,因此与(&)操作符的结果范围在[0, Math.Min(x,y)],x,y均为正整数"); Console.WriteLine($"或(|)操作符的位都为0时,才为0,其他都为1,因此或(|)操作符的结果范围在[Math.Max(x,y), x+y],x,y均为正整数"); Console.WriteLine($"非(~)操作符按位取反,1转化为0, 0转化为1,因此非(~)操作符满足[x+~x=-1]一个数与其取反操作之和为-1"); Console.WriteLine($"异或(^)操作符的位不同时为1, 位相同时为0"); Console.WriteLine($"左移(<<)操作符:【最左侧位不要,在最右侧补0】,相当于乘以2个N次方,【移位是除以32后的余数,范围[0,31],即以32为一个周期】"); Console.WriteLine($"右移(>>)操作符:【最右侧位

2022-03-05

AutoSaveTreeNodeDataDemo

private void tvMesInterface_AfterSelect(object sender, TreeViewEventArgs e) { ReadConfig(e.Node.Text); //记录选中的节点 LastSelectedNode = e.Node; } /// <summary> /// 内部成员变量标记,确保BeforeSelect事件不会多次触发 /// </summary> bool inside = false; private void tvMesInterface_BeforeSelect(object sender, TreeViewCancelEventArgs e) { if (!inside) { inside = true;

2022-03-04

AutoGetFileTypeDemo.rar

自动获取真实文件类型

2022-01-06

TrainPathBookingDemo.zip

多人抢火车票模拟器

2021-12-26

MazeDemoConsole.rar

迷宫控制台

2021-12-15

MazeTest.rar

迷宫

2021-12-15

Base64ConsoleDemo.rar

Console.WriteLine($"比较 手动转化 与 调用系统函数转化 Base64结果:【{base64Custom == base64Auto}】"); Console.WriteLine($"比较 手动还原 与 调用系统函数还原 Base64结果:【{srcCustom == srcAuto}】");

2021-12-11

Base64EncoderDemo.rar

Base64属于简单加密算法的一种。类似于凯撒密码【它是一种替换加密的技术】 Base64字符串由65个字符组成, 大写字母A~Z, 小写字母a~z, 数字0~9,以及三个特殊字符+、/、= 【=“等号”用于补充字符,使Base64字符串长度变成4的倍数】

2021-12-10

OmronFinsDemo.rar

OmronFins TCP通信,使用C#

2021-11-16

BIndDataDemo.zip

DataGridView数据绑定 刷新,多行数据

2021-11-07

软件打包安装工具.rar

软件打包安装工具

2021-10-15

MultiThreadMySqlDemo.rar

读写mysql数据库测试

2021-10-10

WorkOrderDemo.rar

工单混料生产方案

2021-09-12

InovancePlcDemo.rar

汇川PLC的Modbus测试Demo

2021-09-08

modbus协议报文分析_汇川PLC.docx

Modebus报文详解 0x03 读取多个类型寄存器 0x10写多个连续寄存器

2021-09-04

DeviceStatusDemo.rar

设备状态监控DeviceStatusDemo, 保存到本地sqlite数据库中

2021-08-07

QRCodeDemo.rar

生成二维码与解析二维码

2021-07-02

CommonFormDesignerDemo.rar

统一列表界面和编辑界面,只使用两个界面即可实现 增删改查 某个表单 DataGridViewConf_Form.xls AutoGenerateUtil.cs NpoiExcelOperateUtil.cs

2021-05-09

AutoGenerateFormExtern.rar

自动生成CRUD,表单相关代码 DataGridViewConf_Form.xls sh_db.sql AutoGenerateUtil.cs

2021-05-08

AutoGenerateForm.rar

自动生成实体类工具 sb.AppendLine($@" /// <summary> /// {columnComment} /// </summary>{attributeMessage} public {dataType} {columnName} {{ get; set; }}");

2021-04-27

BatchUnlockResFileDemo.rar

批量解除资源文件的锁定 使用CMD命令 参考文档: https://docs.microsoft.com/zh-cn/sysinternals/downloads/streams 需要下载 [Streams\\streams64.exe]文件 -d 针对文件或文件夹执行 -s -d 可以递归执行文件夹下的子文件\子文件夹

2021-04-16

TextEditorDemo.zip

ICSharpCode.TextEditor是一种开源的代码与文本编辑器。TextEditor(和SharpDevelop一样)经常使用策略模式。法高亮通常是由一个DefaultHighlightingStrategy类的实例

2021-01-31

FibonacciSequenceDemo.rar

现在使用四种方式: 一、递归 二、For循环【使用临时变量】 三、For循环【无临时变量】 四、使用数组作为临时仓库 测试四种算法的性能。以及计算出从第几项开始,超过Int32的最大值 新建控制台应用程序FibonacciSequenceDemo

2020-11-10

TestServer_SuperSocket.rar

appServer.Setup(serverConfig) appServer.Start() //客户端连接事件             appServer.NewSessionConnected += AppServer_NewSessionConnected;             //接收事件             appServer.NewRequestReceived += AppServer_NewRequestReceived;             //客户端已关闭事件             appServer.SessionClosed += AppServer_S

2020-10-22

线程安全集合类Concurrent测试

Task task = BlockingCollectionUtil.AddTakeBlockingCollectionAsync(); Task.WaitAny(task); BlockingCollectionUtil.TryTakeBlockingCollection(); ConcurrentBagUtil.Test(); ConcurrentDictionaryUtil.Test(); ConcurrentQueueUtil.Test();

2020-10-17

C#教程20201015.pdf

C#完全基本教程,关键字,条件跳转,迭代,泛型,反射,多线程,异步方法 if,else,for,partial class,enum,struct,interface,delegate

2020-10-15

空空如也

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

TA关注的人

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