随笔分类 - C#基础知识
C#面对对象的理解
摘要:Modbus Rtu的实现与Modbus Tcp的实现类似 C#ModBus Tcp的学习及Master的实现 我们还是需要借用一个开源库NModbus4,在vs中.打开NuGet管理器.安装NModbus4 具体实现,具体实现与之前的Modbus Tcp的实现类似 ,只是在实例化master时将T
阅读全文
摘要:上一篇博客已经完成 C#ModBus Tcp Master的实现 本篇主要对不同的功能码所发出的报文进行解析(包括请求报文及响应报文) 读操作 功能码 0x01 读一组线圈 读取站号为1 从地址12开始的10个线圈 测试结果 上一篇博客已经总结了读操作报文格式,就按照格式划分 报文解析: 注意:报文
阅读全文
摘要:在窗体设计中,会经常遇到跨线程访问窗体控件,如果直接访问会报错,那怎么办呢?直接上代码 代码为一个类,实际运用的时候直接实例化调用即可 1 class CrossThreadUpdateUIClass 2 { 3 4 public void ChangeBtnTxt(Button Btn, stri
阅读全文
摘要:1 /// <summary> 2 /// 保存数值 3 /// </summary> 4 /// <param name="strs">strs为对应的参数字符,值之间用","隔开</param> 5 public static void SaveCsvData(string strs) 6 {
阅读全文
摘要:基于任务的异步编程模型 (TAP) 提供了异步代码的抽象化。 你只需像往常一样将代码编写为一连串语句即可。 就如每条语句在下一句开始之前完成一样,你可以流畅地阅读代码。 编译器将执行许多转换,因为其中一些语句可能会开始运行并返回表示正在进行的工作的 Task。 这是此语法的目标:启用像语句序列一样读
阅读全文
摘要:1.await 运算符 官方解释: await 运算符暂停对其所属的 await 方法的求值,直到其操作数表示的异步操作完成。 异步操作完成后,await 运算符将返回操作的结果(如果有)。 当 await 运算符应用到表示已完成操作的操作数时,它将立即返回操作的结果,而不会暂停其所属的方法。 aw
阅读全文
摘要:常规的对象创建方法: //创建一个Road对象 Road road =new Road(); new 的问题: 实现依赖,不能应对“具体实例化类型”的变化。 解决思路: 封装变化点 哪里变化,封装哪里 潜台词: 如果没有变化,当然不需要额外的封装! 工厂模式的缘起 变化点在“对象创建”,因此就封装“
阅读全文
摘要:创建型模式 单件模式(Singleton Pattern) 动机(Motivation): 在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率。 如何绕过常规的构造器,提供一种机制来保证一个类只创建一个实例? 这应该是类设计者的责任,而
阅读全文
摘要:此示例演示了使用多种语言构造实现并行循环的几种方法。 1 using System.Threading.Tasks; 2 class Test 3 { 4 static int N = 1000; 5 6 static void TestMethod() 7 { 8 // Using a named
阅读全文
摘要:官方解释 提供简化编写并发和异步代码的工作的类型。 主要类型为 Task(表示可以等待和取消的异步操作)和 Task<TResult>(可以返回值的任务)。 TaskFactory 类提供用于创建和启动任务的静态方法,TaskScheduler 类提供默认线程调度基础结构。 类 Concurrent
阅读全文
摘要:1.AutoResetEvent 表示线程同步,事件在一个等待线程释放后收到信号时自动重置, public sealed class AutoResetEvent : System.Threading.EventWaitHandle 继承 Object MarshalByRefObject Wait
阅读全文
摘要:一. 传统的线程取消 所谓的线程取消,就是线程正在执行的过程中取消线程任务。 传统的线程取消,是通过一个变量来控制,但是这种方式,在release模式下,被优化从cpu高速缓存中读取,而不是从内存中读取,会造成主线程无法执行这一个bug。 1 { 2 var isStop = false; 3 va
阅读全文
摘要:1:串口初始化 com = new SerialPort("COM3", 9600, Parity.Even, 7, StopBits.One); 2:打开关闭串口 1 if (com.IsOpen) 2 { 3 com.Close();//关闭 4 } 5 6 com.Open();//打开 3:
阅读全文
摘要:首先:两者都是按地址传递的,使用后都将改变原来参数的数值。 其次:ref可以把参数的数值传递进函数,但是out是要把参数清空,就是说你无法把一个数值从out传递进去的,out进去后,参数的数值为空,所以你必须初始化一次。 这个就是两个的区别,或者说就像有的网友说的,ref是有进有出,out是只出不进
阅读全文
摘要:1. 可空类型修饰符(?) 引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空。 例如:string str=null; 是正确的,int i=null; 编译器就会报错。 为了使值类型也可为空,就可以使用可空类型,即用可空类型修饰符"?"来表示,表现形式为"T?" 例如:int?
阅读全文
摘要:1、Task的优势 ThreadPool相比Thread来说具备了很多优势,但是ThreadPool却又存在一些使用上的不方便。比如: ◆ ThreadPool不支持线程的取消、完成、失败通知等交互性操作; ◆ ThreadPool不支持线程执行的先后次序; 以往,如果开发者要实现上述功能,需要完成
阅读全文
摘要:应用程序的主线程以及使用Thread构造的线程都默认为前台线程 通过BeginXXX方法运行的线程都是后台线程。 线程池线程也就是使用 ThreadPool.QueueUserWorkItem()和Task工厂创建的线程都默认为后台线程 前台线程和后台线程适合的场合 通常,后台线程非常适合于完成后台
阅读全文
摘要:一、基本概念 1、进程 首先打开任务管理器,查看当前运行的进程: 从任务管理器里面可以看到当前所有正在运行的进程。那么究竟什么是进程呢? 进程(Process)是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源。一个正在运行的应用程序在操作系统中被视为一个进程,进程可以包括一个或
阅读全文
摘要:什么是线程池?为什么要用线程池?怎么用线程池? 1. 什么是线程池? .NET Framework的ThreadPool类提供一个线程池,该线程池可用于执行任务、发送工作项、处理异步 I/O、代表其他线程等待以及处理计时器。那么什么是线程池?线程池其实就是一个存放线程对象的“池子(pool)”,他提
阅读全文
摘要:先引入一下线程池的概念: 百度百科:线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程
阅读全文

浙公网安备 33010602011771号