自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 WPF开发经验-实现自带触控键盘的TextBox

一 引入项目有个新需求,当点击或触碰TextBox时,基于TextBox的相对位置,弹出一个自定义的Keyboard,如下图所示:二 KeyboardControl先实现一个自定义的KeyboardControl,它继承自Window。Xaml代码如下:<Window x:Class="WpfApp1.KeyboardControl" xmlns="ht...

2022-10-01 20:21:00 417 1

原创 WPF开发经验-实现一种机械泵控件

一 引入考虑实现一种机械泵控件。机械泵是工业中通常用来制造真空的一类设备,我们在绘制界面UI时希望可以生动形象地来表述一个机械泵,下面讲述了一种简单的实现。二MechanicalPumpControl声明一个MechanicalPumpControl的自定义控件,它继承自Control类。对于一个MechanicalPump来说,它具有状态,这里定义一个State依赖属性来简单描述...

2023-01-28 17:23:00 406

原创 WPF开发经验-实现一种通用阀门控件

一 引入在设计设备界面时,经常会有一种需求,展示一个阀门,阀门有通断两种状态:二 CommonValveControl考虑实现一个自定义控件,CommonValveControl。使用自定义控件比用户控件更灵活,更具扩展性,可以使用不同的样式和模板。CommonValveControl定义两个依赖属性,Orientation表示安装展示的方向,Status表示阀门的通断状态。p...

2022-12-19 17:16:00 377 3

原创 算法-2 选择排序、冒泡排序、插入排序

一 选择排序选择排序的时间复杂度O(n2),额外空间复杂度O(1)public static void SelectionSort(int[] arr){ if (arr == null || arr.Length < 2) { return; } for (int i = 0; i < arr.Length - 1; i++...

2022-11-19 12:34:00 163

原创 算法-1 算法复杂度

一 算法复杂度算法复杂度分为时间复杂度和空间复杂度。时间复杂度是指执行算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空间。算法的复杂性体运行该算法时的计算机所需资源的多少,计算机资源最重要的是时间和空间(即寄存器)资源,因此复杂度分为时间和空间复杂度。二 时间复杂度2.1 关于时间复杂度一个算法花费的时间与算法中语句的执行次数成正比例,算法中语句执行次数越多,它花费时...

2022-11-18 15:05:00 182

原创 C#并发编程-4 同步

如果程序用到了并发技术,那就要特别留意这种情况:一段代码需要修改数据,同时其他代码需要访问同一个数据。这种情况就需要考虑同步地访问数据。如果下面三个条件都满足,就必须用同步来保护共享的数据。多段代码正在并发运行;这几段代码在访问(读或写)同一个数据;至少有一段代码在修改(写)数据。一 阻塞锁如果有多个线程需要安全地读写共享数据,这种情况可以考虑使用lock语句。一...

2022-08-13 19:21:00 182

原创 C#并发编程-3 并行编程基础

如果程序中有大量的计算任务,并且这些任务能分割成几个互相独立的任务块,那就应该使用并行编程。并行编程用于分解计算密集型的任务片段,并将它们分配给多个线程。这些并行处理方法只适用于计算密集型的任务。一 数据的并行处理如果有一批数据,需要对每个数据进行相同的操作,其操作是计算密集型的,需要耗费一定的时间。Parallel 类型有 ForEach 方法可以解决上述问题。下例使用了一批矩阵,对...

2022-08-04 17:17:00 176

原创 C#并发编程-2 异步编程基础-Task

一 异步延迟在异步方法中,如果需要让程序延迟等待一会后,继续往下执行,应使用Task.Delay()方法。//创建一个在指定的毫秒数后完成的任务。public static Task Delay(int millisecondsDelay);//创建一个在指定的毫秒数后完成的可取消任务。public static Task Delay(TimeSpan delay, Cancella...

2022-07-29 16:51:00 324

原创 C#并发编程-1 并发编程概述

一 并发编程简介1.1 关于并发和并行并发和并行的概念:并发:(Concurrent),在某个时间段内,如果有多个任务执行,即有多个线程在操作时,如果系统只有一个CPU,则不能真正同时进行一个以上的线程,   它只能把CPU运行时间划分成若干个时间段,再将时间段分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状态。并行:(Paralle...

2022-07-28 17:05:00 638

原创 改善C#程序的方法-3 比较器和LINQ排序

一 创建对象时考虑实现比较器假设有这样的场景,有一个40个人的学生列表,业务中需针对学生的成绩来进行排序。可以考虑用IComparable接口和ICompare接口实现:class Program{ static void Main(string[] args) { var stus = new List<Student>(); ...

2022-07-27 15:48:00 146

原创 改善C#程序的方法-2 使用TryParse

一 使用TryParse,而不是Parse除string外的所有基元类型,都有两个将string类型转型为其本身类型的方法:Parse 和 TryParse。以double类型为例,这两个方法最简单的原型为:public static Double Parse(string s);public static bool TryParse(string s, out Double resu...

2022-07-25 11:20:00 236

原创 C#-14 枚举器和迭代器

一 枚举器和可枚举类型当我们为数组使用foreach语句时,这个语句为我们依次取出了数组中的每一个元素。var arrInt = new int[] { 11, 12, 13, 14 };foreach (var item in arrInt){ Console.WriteLine(item);}原因是数组实现了IEnumerable接口,接口提供了一个GetEnumer...

2022-05-25 17:36:00 47

原创 C#-13 泛型

一 泛型泛型提供了一种更优雅的方式,可以让多个类型共享一组代码。泛型允许我们声明类型参数化的代码,可以用不同的类型进行实例化。也就是说,我们可以用"类型占位符"来写代码,然后在创建类的实例时指明真实的类型。C#提供了5种泛型:类、结构、接口、委托和方法。二 泛型类如下代码声明了一个SomeClass的泛型类,类型参数T1和T2列在尖括号中,当作真实类型在声明的主体中使用。class...

2022-05-23 19:33:00 69

原创 C#-12 转换

一 什么是转换转换是接受一个类型的值并使用它作为另一个类型的等价值的过程。下列代码演示了将1个short类型的值强制转换成byte类型的值。short var1 = 5;byte var2 = 10;var2 = (byte) var1; //强制转换,将var1的值转换成byte类型二 隐式转换有些类型的转换不会丢失数据与精度,如将8位的值转换成16位的值是非常容易...

2022-05-07 11:19:00 76

原创 C#-11 接口

一 什么是接口接口是指定一组函数成员而不实现它们的引用类型。class Program{ static void FlyFunc(IFly obj) { obj.Fly(); } static void Main(string[] args) { var bird = new Bird(); va...

2022-04-28 16:11:00 61

原创 SECS半导体设备通讯-4 GEM通信标准

一 概述GEM标准定义了通信链路上的半导体设备的行为。SECS-II标准定义了在主机和设备之间交换的消息和相关数据项。GEM标准则定义了在哪种情况下应该使用哪些SECS-II消息以及由此产生的结果行为。图1.1说明了GEM、SECS-II和其他通信替代方案之间的关系。GEM为所有半导体设备定义了SECS-II的标准实现。它定义了一套通用的设备行为和通信能力,这些设备行为和通信能力提供了支持...

2022-03-29 16:34:00 433

原创 SECS半导体设备通讯-3 SECS-II通信标准

一 SECS-II 概述SECS-II 标准定义了使用如SECS-I、HSMS等传输协议在设备和主机之间交换的消息的形式和含义。定义了以消息的形式在设备和主机之间传递信息,消息按其行为分类,称为Stream。有很多不同的行为Stream,每个Stream又包括具体的消息,称为Function。标准还定义了消息的结构,消息由数据项和数据项列表 ( items and lists of ite...

2022-03-25 17:31:00 1071

原创 SECS半导体设备通讯-2 HSMS通信标准

一 HSMS通信标准概述HSMS定义了使用 TCP/IP 作为物理传输媒质时的通信接口。HSMS使用TCP/IP流支持,提供了可靠的双向同步传输,可以用来作为SECS-I通信以及其他更高级的通信环境的替代。1.1 HSMS连接状态图HSMS状态机如下图所示,此图中描述的行为定义了HSMS的基本要求。状态图说明:NOT CONNECTED:该实体已准备好侦听或启动TCP/IP连...

2022-03-24 20:10:00 1312

原创 SECS半导体设备通讯-1 SECS的基本概念

一 什么是SECSSECS(SEMI Equipment Communication Standard),半导体设备通讯标准。此标准由SEMI (Semiconductor Equipment and Materials International 国际半导体设备与材料产业协会) 制定,用来统一各个生产设备之间以及生产设备和控制设备之间的通讯。SECS标准包括SECS-I、SECS-II、...

2022-03-24 10:44:00 1830

原创 C#-10 事件

一 发布者和订阅者很多时候都有这种需求,当一个特定的程序事件发生时,程序的其他部分可以得到该事件已经发生的通知。发布者/订阅者模式可以满足这种需求。发布者:发布某个事件的类或结构,其他类可以在该事件发生时得到通知。订阅者:注册并在事件发生时得到通知的类或结构。事件处理程序:由订阅者注册到事件的方法,在发布者触发事件时执行。触发事件:当事件触发时,所有注册到它的方法会被依次调用。事...

2022-03-21 16:24:00 93

原创 C#-9 委托

一 什么是委托可以认为委托是持有一个或多个方法的对象。可以执行委托,执行时委托会执行它所持有的方法。从C++的角度理解,委托可以看成一个类型安全、面向对象的C++函数指针。delegate void MyDel(int value); //声明委托类型class Program{ void PrintLow(int value) { Console.W...

2022-03-19 15:48:00 66

原创 C#-8 数组

一 关于数组数组是由一个变量名称表示的一组同类型的数据元素。数组中的元素通过变量名和方括号索引来访问。int[] intArray = new int[] { 1, 2, 3 }; //声明了一个名称为intArray的数组对象// 1 2 3 为 intArray中的元素 ;// intArray的维度为1 ;// intArray的维度长度为3 ;// intArray的长度为...

2022-03-18 19:07:00 77

原创 WPF开发经验-实现Win10虚拟触摸键盘

一 引入项目有个需求,需要实现纯触控操作进行键盘输入。项目部署在Win10系统上,考虑有两种方案来实现。通过调用Win10自带的触摸键盘来实现;通过WPF实现一个触摸键盘来实现;二 调用Win10自带的触摸键盘简单附上一个调用Win10系统的TabTip.exe的操作类。public class TabTipHelper{ private const int WM_...

2022-03-17 16:55:00 1071

原创 C#-7 结构和枚举

一 什么是结构结构是程序员定义的数据类型,有数据成员和函数成员,和类非常类似。类是引用类型,而结构是值类型;结构和类一样可以实现接口;结构是隐式密封的,不能被派生;结构类型的变量不能为null;两个结构的变量不能引用同一对象;在结构中不允许字段初始化语句;预定义简单类型(如int,long,short 等等. . . ),实际上在.Net中都实现为结构。class CSi...

2022-03-16 15:56:00 108

原创 WPF开发经验-WPF的TextBox控件的MouseDown事件不响应的解决方法

一 问题的发现最近项目有个需求,大概是,当点击某个TextBox时,先执行一些业务上的逻辑处理。于是按以往思维,将TextBox的MouseDown事件关联事件处理方法,将业务处理写在方法里。调试发现,点击TextBox时,事件处理方法未执行。二 问题的原因通过查阅微软官方文档了解到问题原因。附上文档链接:https://docs.microsoft.com/en-us/prev...

2022-03-15 18:37:00 1169

原创 C#-6 运算符和语句

一 运算符重载可以重定义或重载 C# 中内置的运算符。重载运算符是具有特殊名称的函数,是通过关键字 operator 后跟运算符的符号来定义的。public static Box operator+ (Box b, Box c){ Box box = new Box(); box.length = b.length + c.length; box.breadth = ...

2022-03-11 16:56:00 45

原创 C#-5 类和继承

一 类继承继承是使代码可以复用的重要手段,也是面向对象程序设计的核心思想之一。继承呈现了面向对象程序设计的层次结构。通过继承,我们能以一个已经存在的类为基础来定义一个新类。已存在的类称为基类或父类,新类称为派生类或子类。派生类的成员包括:基类的成员和派生类自身声明的成员。继承自基类的成员可以被访问,就像是派生类自己声明的一样。class BaseClass{ public ...

2022-03-11 11:46:00 81

原创 C#-4 方法

一 何为方法方法是一块具有名称的代码,是类的函数成员。方法主要分为方法头和方法体。void Method(){ 语句1; 语句2;}二 类型推断和var关键字var sum = 15;var myClass = new MyClass();var关键字是句法上的速记,表示任何可以从初始化语句右边判断出的类型。三 方法调用var myClass = new...

2022-03-10 19:37:00 81

原创 C#-3 深入理解类

一 类的概述(类是逻辑相关的数据和函数的封装,通常代表真实世界中或概念上的事物)类是一种能存储数据并执行代码的数据结构,包含数据成员和函数成员。数据成员存储类或类的实例相关的数据;函数成员执行代码。二 声明类class MyClass{ 数据成员...(字段、常量) 函数成员...(方法、属性、构造函数、析构函数、事件、索引器、运算符) int MyF...

2022-03-10 17:22:00 54

原创 C#-2 C#程序

一 C#程序是一组类型声明C#程序或DLL的源代码是一组一种或多种类型声明。对于可执行程序,类型声明中必须有一个包含Main方法的类。命名空间是一种把相关的类型声明分组并命名的方法。是类在程序集中逻辑上的分组。二 Main:程序的起始点每个C#可执行程序必须带有Main方法。每个C#程序的可执行起始点在Main中的第一条指令。static void Main(){ ...

2022-03-10 14:34:00 87

原创 改善C#程序的方法-1 操作字符串

正确操作字符串引言:字符串是使用很频繁的一种数据类型。如果使用不慎,则会为一次字符串操作所带来的额外性能开销而付出代价。下面从这几个方面来探讨如何正确操作字符串:1.确保尽量少的装箱,尽可能避免编写不必要的装箱代码string str1 = "str1" + 8; //运行时会完成一次装箱行为string str2 = "str2" + 8.ToStri...

2021-06-02 15:23:00 37

原创 SQLServer配置开启TCP/IP连接

一 先启用SQLServer的TCP/IP协议1.1 打开SQLServer配置管理器1.2 启用TCP/IP二 设置SQLServer端口2.1 双击TCP/IP,弹出属性设置框2.2 将IP地址中的IPALL的TCP动态端口设置为1433三 重启SQLServer服务3.1 右键单击,选择重新启动...

2021-06-02 09:59:00 2187

原创 线程安全和线程同步

一. 关于线程安全和线程同步线程同步:进程/线程同步就是并发进程/线程在⼀些关键点上可能需要互相等待与互通消息。即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,处于等待状态,直到该线程完成操作, 其他线程才能对该内存地址进行操作。线程安全:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用...

2021-05-15 17:25:00 57

原创 进程和线程

一.进程和线程的概念:进程是资源分配的最小单位,线程是CPU调度的最小单位。进程和线程都是一个时间段的描述,是CPU工作时间段的描述,不过是颗粒大小不同。进程:就是上下文切换之间的程序执行的部分。是运行中的程序的描述,也是对应于该段CPU执行时间的描述。线程:是共享了进程的上下文环境,的更为细小的CPU时间段。线程主要共享的是进程的地址空间。这里描述的进程线程概念和实际代码中所说的...

2021-05-15 17:08:00 64

原创 C#-1 .Net框架

一 .Net框架组成分为三部分:公共语言运行时CLR、框架类库FCL和编程工具1.CLR:公共语言运行时(Common Language Runtime):是一个运行时环境负责代码安全验证、代码执行、资源管理(内存分配和垃圾收集),并保证应用和底层操作系统之间必要的分离。它在操作系统的顶层,是.Net的核心组件。2.FCL:框架类库(Framework Class Library):提...

2021-05-12 18:42:00 123

原创 第一篇随笔,从这里开始

从这里开始,记录开发中的一些经验与想法。

2021-05-11 21:22:00 63

空空如也

空空如也

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

TA关注的人

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