C#
wu_pan123
应用:C/S(C# + WPF\WinForm)、B/S(前后端分离,Vue + ASP.NET Core Web API + Ant Design Vue)学习中。
开发框架:C/S(MvvmLight、Nlog、SuperSocket)、B/S(前端 Ant Design、Vue.js)学习中。
WPF样式及控件库:MaterialDesign Themes、HandyControl、LiveChart等。
B/S样式及控件库:Element Plus、Ant Design Vue等(学习中)。
通信协议:ModBusTcp、FinsTcp、PPI、OOP698等。
展开
-
串口通讯粘包处理方法
1.水平一般,不喜勿喷2.思路将串口缓冲区的数据全部读出来,并做缓存,报文格式找到符合报文规范的一段数据,从缓冲区中取出这段数据本文中1.首先查找是否同时包含报文头和报文尾,如果包含,2.找到第一个报文头字节和第一个报文尾字节,提取这两个字节中的数据,判断是否满足报文规范,如果满足,表示这是一条完整的报文,如果不满足 查找第二个个报文尾,3.重复步骤2直到不在包含报文尾或找到一条完整报文,4.如果查找到数据缓冲区最后还是没有找到完整报文或不在包含报文尾,则在数据缓冲区查找第二个报文头,并重复步.原创 2021-07-13 21:25:37 · 5804 阅读 · 2 评论 -
Json格式字符串转字典
首先,安装NewtownSoft.Json库然后,引入命名空间using Newtonsoft.Json;using Newtonsoft.Json.Linq;最后,代码如下 /// <summary> /// json格式字符串转字典方法 /// </summary> /// <param name="json">json格式字符串</param> /// <retu原创 2020-11-23 15:13:38 · 1062 阅读 · 1 评论 -
利用nuget.exe进行打包
一、准备工作1.nuget.exe下载地址:2.环境变量设置方法:二、具体步骤1.在需要打包的库根目录下运行命令行程序,并执行 nuget spec2.打开新生成的文件Package.nuspec(用文本文档或npp打开)打开后的内容如下:<?xml version="1.0" encoding="utf-8"?><package > <metadata> <id>包ID或者包名</id> .原创 2020-10-26 15:49:29 · 2211 阅读 · 2 评论 -
提取数字
string time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff");//获得系统时间 time = System.Text.RegularExpressions.Regex.Replace(time, @"[^0-9]+", "");//提取数字转载 2018-01-11 17:10:46 · 266 阅读 · 0 评论 -
快排算法(好好看看)
using System;namespace ConsoleApplication2{ internal class Program { private static void Main(string[] args) { int[] arr = new int[] { 3, 4, 2, 1, 5, 77777, 865,转载 2017-12-28 12:03:12 · 279 阅读 · 0 评论 -
C#值类型和引用类型作为方法参数时,加与不加ref的区别
示例1: private static void Main(string[] args) { StringBuilder test = new StringBuilder(); test.Append("HELLO "); MyTest(test); Console....原创 2018-12-20 16:52:10 · 948 阅读 · 0 评论 -
将数据库中的数据读取到数据表中,并通过datagridview显示
namespace WindowsFormsApplication8{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private DataSet ds = new DataSet原创 2017-12-07 11:55:04 · 1735 阅读 · 0 评论 -
数组绑定到dataset上
string str = Request.Form["txtTest"].Trim(); if (str != "") { string[] a = str.Split(','); Random random=new Random(); random.Next(1转载 2017-12-07 10:51:22 · 309 阅读 · 0 评论 -
C#重载运算符必须静态吗? 为什么必须是静态的?
public static Vector operator +(Vector lhs, Vector rhs) { //运算符重载代码 }运算符重载的声明方式与方法的声明方式相同,但operator关键字告诉编译器,它实际上是一个运算符重载,后面是相关运算符的符号,在本例中就是+。返回类型是在使用这个运算符时获得的类型。在本例中,把两个矢转载 2017-12-13 10:19:03 · 1892 阅读 · 0 评论 -
Interlocked类的静态方法
1.public static class Interlocked2.Add(Int32, Int32) 对两个 32 位整数进行求和并用和替换第一个整数,上述操作作为一个原子操作完成。Add(Int64, Int64) 对两个 64 位整数进行求和并用和替换第一个整数,上述操作作为一个原子操作完成。3.CompareExchange(T, T, T) 比较两个指定的引用类型的实例 T 是转载 2018-01-16 11:43:51 · 402 阅读 · 0 评论 -
跨线程更新UI的几种方法
1.跨类跨线程更新UI方法1 1.0 UI界面代码public partial class Form1 : Form { private Thread myThread; public Form1() { InitializeComponent(); } privat...原创 2018-09-11 09:36:48 · 766 阅读 · 0 评论 -
C# Encoding
可以使用Encoding.BigEndianUnicode.GetBytes(cha[])和Encoding.Unicode.GetBytes(cha[])将cha[]转成Unicode格式的Byte[],但是Unicode编码采用的是BigEndian方式的编码,所以建议转Unicode时,调用Encoding.BigEndianUnicode.GetBytes(cha[])方法。...原创 2018-12-27 14:06:20 · 1004 阅读 · 0 评论 -
Windows注册表基础
1..NET Framework提供了访问注册表的类,比较常用的是Registry和RegistryKey类,这两个类都在Microsoft.Win32命名空间下。2.Registry类不能被实例化,他的作用只是实例化RegistryKey类。Registry类的常用属性及说明 属性 说明 ClassesRoot 定义文档的类型(或类)以及与那些类型相关的属性。该字段读取...原创 2019-01-16 16:03:08 · 635 阅读 · 0 评论 -
解决数据库datetime数据在DataGridView里不显示秒的问题
1.选择要编辑的列》外观》DefaultCellStyle2.CellStyle生成器》行为》Format》三个点3.选择日期时间》选择需要的时间格式原创 2019-04-03 10:59:32 · 3334 阅读 · 0 评论 -
把数据库里的字段值分别加载
private void Form1_Load(object sender, EventArgs e) { string constr = "server = ZX-201603011417\\SQLEXPRESS;user = wp;pwd = 2611709;database = serialPort"; SqlConnectio原创 2017-06-09 14:44:06 · 168 阅读 · 0 评论 -
为什么类里既要定义字段又要定义属性
按编写.NET代码的规则,字段(除了const字段以外)应总是私有的,并由公有属性封装,可能是为了安全性吧字段修饰符为private或者proteced属性修饰符为public原创 2017-12-12 10:20:05 · 552 阅读 · 0 评论 -
printDocument和printPreviewDialog的一些设置
private void Form1_Load(object sender, EventArgs e) { PrintDocument myPrint = new PrintDocument(); PrintPreviewDialog mm = new PrintPreviewDialog(); Form f原创 2017-12-11 10:40:56 · 4779 阅读 · 0 评论 -
事件-委托
namespace WindowsFormsApplication7{ public class Class_myEvent { public delegate void myEventHandler(object sender, System.EventArgs e);//定义一个委托 public void myEventFuncti原创 2017-05-25 15:32:59 · 178 阅读 · 0 评论 -
C#获取当前日期时间
我们可以通过使用DataTime这个类来获取当前的时间。通过调用类中的各种方法我们可以获取不同的时间:如:日期(2008-09-04)、时间(12:12:12)、日期+时间(2008-09-04 12:11:10)等。//获取日期+时间DateTime.Now.ToString(); // 2008-9-4 20:02:10DateTime.Now.ToL转载 2017-06-09 11:34:41 · 536 阅读 · 0 评论 -
Application.Exit()和this.close()主要有什么区别?
Application.Exit 方法 通知所有消息泵必须终止,并且在处理了消息以后关闭所有应用程序窗口。Form.Close 方法关闭窗体。 如果该窗体是应用程序的主启动窗体,则調用窗体的Close()方法,跟調用Application.Exit的效果差不多。如果该窗体非主启动窗体,则只是关闭该窗体而不关闭整个应用程序。如果是多线程应用程序,要想关闭整个应用转载 2017-06-12 08:50:00 · 4274 阅读 · 0 评论 -
连接数据库语句
Windows身份验证:Data Source=计算机名称或ip地址;Initial Catalog=数据库名称;Integrated Security=TrueSQL server身份验证:server =计算机名称或ip地址;user = 用户名;pwd = 密码;database = 数据库名称转载 2017-09-25 12:05:03 · 1181 阅读 · 0 评论 -
C# 小数点后保留两位小数,四舍五入的函数及使用方法
1 Math.Round(45.367,2) //Returns 45.372 Math.Round(45.365,2) //Returns 45.36 C#中的Round()不是我们中国人理解的四舍五入,是老外的四舍五入,是符合IEEE标准的四舍五入,具体是四舍六入,下面的才是符合中国人理解的四舍五入1 Math.Round(45.367,2,M转载 2017-09-07 13:46:27 · 3122 阅读 · 0 评论 -
计算时间差 用timespan类
TimeSpan 结构 表示一个时间间隔。 命名空间:System程序集:mscorlib(在 mscorlib.dll 中)1.DateTime值类型代表了一个从公元0001年1月1日0点0分0秒到公元9999年12月31日23点59分59秒之间的具体日期时刻。因此,你可以用DateTime值类型来描述任何在想象范围之内的时间。一个DateTime值代表了一个具体的转载 2017-09-07 13:45:37 · 502 阅读 · 0 评论 -
什么时候该用委托,为什么要用委托,委托有什么好处
我用的最多的是在多线程 访问UI界面控件的时候。UI控件都由主线程创建和绘制的,如果子线程想访问控件的话,就把这个任务委托给主线程。比如有个子线程 想要给 form中的label控件赋值 Label.Text="内容"此时必须用委托让主线程去执行这个赋值语句。如果不这么做,会出现线程安全的异常。产生多个线程同时访问同一个控件的异常。这是不符合线程安全的要求的转载 2017-05-04 09:12:26 · 4236 阅读 · 0 评论 -
ArrayList、string、string[]之间的转换
1、ArrarList 转换为 string[] : ArrayList list = new ArrayList(); list.Add("aaa"); list.Add("bbb"); string[] arrString = (string[])list.ToArray(typeof( string)) ;2、string[] 转换为 Arra转载 2017-11-16 11:46:58 · 799 阅读 · 0 评论 -
多条件查询数据库表中记录
当有多个条件查询数据库表中的记录时,只需要将各个条件用and或者or即可,与条件顺序无关。如:select * from Table_login where name = 'wp'and password='1' and pp='pp'and qq='qq' or qq='dd'原创 2017-11-21 08:55:22 · 371 阅读 · 0 评论 -
画笔线帽 LineCap
线帽”(LineCap),顾名思义,就是线条首尾的外观,在默认的情况下,使用画笔绘制出的直线,其起点和终点都是相同的---方形。在GDI+中,可以通过修改画笔的 StartCap 属性来设置起点的线帽,通过修改EndCap来设置终点的线帽。不同外观的线帽是有LineCap 枚举列出的,其定义如下表:成员说明AnchorMask指定用于检查线帽是否为锚头帽转载 2017-11-14 14:58:31 · 1515 阅读 · 0 评论 -
lambda表达式
Func 表达式名 = (参数1,参数2,、、、参数n) => {运算代码};例子1:static void Main(string[] args) { Func add = x=> x *2; Console.WriteLine(add(2)); Console.Read(); }例子2:原创 2017-11-13 16:11:50 · 128 阅读 · 0 评论 -
byte解析为bool
byte bb = new byte(); bb = 3; for (int i = 0; i < 8; i++) { bool cc = (bb & Convert.ToInt32(Math.Pow(2, 7 - i))) == Math.Pow(2, 7 - i) ? true : fals原创 2017-10-09 10:51:04 · 3320 阅读 · 0 评论 -
二进制、十进制和十六进制转换
1.十进制转十六进制用ToString()方法就行int i = 13;string s = i.ToString("X2");ToString()的参数 X表示十六进制字符串,数字2表示显示位数结果为:0Dstring s = i.ToString("X1");结果为:D2.其他的方法//十进制转二进制Console.WriteLine("十进制166的二进制表示: "+Conv转载 2017-10-09 08:50:38 · 510 阅读 · 0 评论 -
C#中数组、ArrayList和List三者的区别
在C#中数组,ArrayList,List都能够存储一组对象,那么这三者到底有什么样的区别呢。数组 数组在C#中最早出现的。在内存中是连续存储的,所以它的索引速度非常快,而且赋值与修改元素也很简单。[csharp] view plain copy"font-family:SimSun;font-size:18px;">//数转载 2017-09-06 10:12:48 · 204 阅读 · 0 评论