C#
文章平均质量分 70
万里归来少年心
这个作者很懒,什么都没留下…
展开
-
FileSystemWatcher 监控文件变化
本文测试了FileSystemWatcher 类监控文件变化。using System;using System.Security.Permissions;using System.IO;namespace ConsoleApp1{ public class FileStateWatcher { [PermissionSet(Secu...原创 2020-01-15 15:44:32 · 1294 阅读 · 0 评论 -
Socket编程(三)- 实现简单的聊天程序
1.服务器using System;using System.Net;using System.Net.Sockets;using System.Text;using System.Threading;using System.Windows.Forms;namespace Server{ public partial class Form1 : Form {...原创 2019-03-06 09:53:46 · 2918 阅读 · 1 评论 -
线程间操作无效: 从不是创建控件的线程访问它
写了一个不断生成随机数的程序,姑且可以看做是简易版的抽奖程序,抛出了了“线程间操作无效: 从不是创建控件的线程访问它”的错误。先看一下代码:using System;using System.Threading;using System.Windows.Forms;namespace WindowsFormsApp4{ public partial class Fo...原创 2019-02-26 10:05:56 · 17106 阅读 · 4 评论 -
SoundPlayer的使用示例
开发一个简易的音乐播放器。实现选择音乐文件,双击播放,上一曲,下一曲等功能。using System;using System.Collections.Generic;using System.IO;using System.Media;using System.Windows.Forms;namespace WindowsFormsApp3{ public p...原创 2019-02-25 17:34:09 · 5066 阅读 · 0 评论 -
.NET使用gRPC入门教程
gRPC是一个高性能、通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf(Protocol Buffers)序列化协议开发,且支持众多开发语言,能够基于语言自动生成客户端和服务端功能库。1.新建工程GrpcClient、GrpcServer和GrpcLibrary 添加 - 新建项目 - 控制台应用 GrpcClien...原创 2018-12-10 11:41:21 · 7940 阅读 · 0 评论 -
WebRequest、WebResponse的使用示例
1.WebRequest和WebResponse 首先新建windows窗体应用程序,添加列表框,并将其docking属性设置为“DockStyle.Fill”,然后对主窗体的构造函数进行如下改动。public Form1(){ InitializeComponent(); WebRequest request = WebRequest.Create("http:/...原创 2018-11-20 12:06:23 · 7423 阅读 · 1 评论 -
Socket编程(二)
1.消息结构 定义客户端和服务器之间的消息结构,便于消息的发送和接收。 消息Message包括序号ID和消息体Body,函数GetMessageByte和GetMessage相当于消息的压缩与解压。public class Message{ public Int16 ID { get; set; } public byte[] Body { get; set...原创 2018-11-05 18:07:45 · 401 阅读 · 0 评论 -
WebClient的使用示例
1.OpenRead() 从Web站点检索数据,使用OpenRead()方法返回一个Stream引用。ReadLine()方法从数据流中以文本的形式获取数据。 下例从百度网页上读取数据,然后逐行显示在屏幕上。static void Main(string[] args){ WebClient client = new WebClient(); Strea...原创 2018-11-02 17:08:12 · 3697 阅读 · 0 评论 -
.NET Core 使用 log4net
1.安装log4net 建立.NET Core工程 - 右键 - 管理NuGet程序包 - 搜索log4net - 安装。2.日志输出到控制台using log4net;using log4net.Config;using log4net.Repository;using System;namespace LogTest{ class Program...原创 2018-10-25 17:17:44 · 4802 阅读 · 0 评论 -
Socket编程(一)
1.服务器端 创建服务器端socket 绑定IP和端口号 开始监听,等待客户端做连接 获取客户端的socket,并与之通信class Program{ static void Main(string[] args) { //1.创建socket Socket server = new Socket(Add...原创 2018-08-02 22:34:44 · 265 阅读 · 0 评论 -
Socket编程(五)- 传送文件
本文介绍客户端和服务器之间传送文件的方法。 首先,我们需要明确:网络上传送的是二进制流。当接收方收到发送方传过来的数据时,需要判断收到的是文本还是文件。类型不同,处理方式也不同。收到文本,则显示在对话框中。收到文件,则弹出保存按钮,保存文件。 可以在二进制流中的第一位设置标记位:0表示文本,1表示文件(未来还可以扩展,2表示震动,3表示语音等等)。public e...原创 2019-03-06 15:59:20 · 442 阅读 · 0 评论 -
Socket编程(四)- 多人聊天
为了实现多人聊天,服务器需要存储远程客户端的IP地址和Socket。 用Dictionary存储,IP地址作为Key,Socket作为Value。方便用IP地址索引Socket。 Dictionary<string, Socket> clientDic = new Dictionary<string, Socket>(); 当服务器收到客户...原创 2019-03-06 11:52:29 · 464 阅读 · 0 评论 -
Path.Combine(string path1, string path2 )的用法
将两个路径合成一个路径,自动处理路径分隔符的问题。函数声明如下:public static string Combine ( string path1, string path2 ) 常规使用方法。string path = Path.Combine("D:\\work", "April.txt"); //"D:\work\April.txt" 如果其...原创 2019-03-20 09:54:59 · 20683 阅读 · 1 评论 -
CMake 入门实战
参考文档CMake入门 CMake官网入门介绍 Cmake官方文档原创 2019-05-16 17:05:49 · 472 阅读 · 0 评论 -
C#使用MathNet库进行矩阵运算
Math.net计算库是专为.NET开发的开源科学计算库。包含了大部分矩阵运算、线性运算等功能。1.安装 项目 - 右键 - 管理NuGet程序包2.矩阵定义//矩阵的定义和初始化var matrix1 = new DenseMatrix(3); //3维方阵var matrix2 = new DenseMatrix(2, 2); //2维方阵va...原创 2019-05-15 18:01:46 · 12271 阅读 · 1 评论 -
C#将 List<double> 转为 byte[]
实例代码using System;using System.Collections.Generic;using System.IO;namespace ConvertTest{ class Program { //将List<double> 转为 byte[] static byte[] ConvertDouble...原创 2019-04-19 17:15:41 · 6532 阅读 · 0 评论 -
gRPC使用SSL实现加密通讯
grpc默认实现了基于证书的SSL加密通讯,使用中需要注意以下事项。 在Windows上开发,首先安装 OpenSSL,将OpenSSL.exe的路径添加到环境变量中。 通过以下样例脚本生成通讯中所需要的服务端和客户端证书,其中需要特别注意的是,Generate server signing reques中的CN=KEKYK字段,如果是本机测试,使用本机名称。如果是真实环境,使用...原创 2019-03-19 10:24:12 · 6986 阅读 · 2 评论 -
OpenSSL 生成服务器及客户端证书
1.下载OpenSSL windows版的下载地址为:http://www.slproweb.com/products/Win32OpenSSL.html2.安装及配置 安装OpenSSL 。 将OpenSSL.exe所在路径添加到环境变量中。 修改openssl.cfg文件中的dir属性值 ,用于存放生成的证书文件。3.随机数文件(.rand)...原创 2019-03-19 09:48:54 · 7595 阅读 · 3 评论 -
Directory的创建,删除,移动
1.目录var path = "E://April";2.创建目录if (!Directory.Exists(path)){ Directory.CreateDirectory(path);}3.删除目录if (Directory.Exists(path)){ Directory.Delete(path);} 当path为空时,删除成功。...原创 2019-03-20 14:40:00 · 1861 阅读 · 0 评论 -
File的创建,删除,复制,移动
1.路径var path = Path.Combine(Environment.CurrentDirectory,"April.txt"); 其中,Environment.CurrentDirectory 取得当前工作目录的完整路径。Path.Combine连接两个路径,该语句的执行结果为:"D:\sqlTest\AliveMessage\bin\Debug\netcoreapp2...原创 2019-03-20 11:33:05 · 300 阅读 · 0 评论 -
C#中的Path类
代码实例:using System;using System.IO;namespace CurveTest{ class Program { static void Main(string[] args) { string path = Path.Combine("D:\\work", "April.tx...原创 2019-03-20 10:38:00 · 1046 阅读 · 0 评论 -
Excel文件解析
1.创建Excel文件 创建名称是"TextFile1.xls"的文档,设置属性“复制到输出目录 - 如果较新则复制”。在工程运行时,会自动将该txt文件复制到bin下面。 Excel文件"TextFile1.xls"的内容如下: 2.解析Excel文件class Program{ static void Main(string[] args) ...原创 2018-08-01 23:17:53 · 860 阅读 · 0 评论 -
Json文件解析
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,用于存储和交换文本信息。它比XML更小、更快、更易解析。 JSON语法规则:数据在键值对中 数据由逗号分隔 花括号保存对象 方括号保存数组 JSON值可以是:数字(整数或浮点数) 字符串(在双引号中) 逻辑值(true或false) 数组(在方括号中) ...原创 2018-08-01 21:29:25 · 3095 阅读 · 0 评论 -
XML文件解析
XML是可扩展标记语言,用来传输和存储数据。 XML文档必须包含根元素,该元素是所有其他元素的父元素。 XML文档中的元素形成了树形结构。XML有以下特点: 所有XML元素必须有关闭标签 XML标签对大小写敏感 XML必须正确地嵌套 XML必须有根元素 XML属性值必须加引号1.定义XML文档 创建名称是"TextFile1.txt"的文档,设置属性“...原创 2018-08-01 16:49:19 · 241 阅读 · 0 评论 -
c#中的委托
在c#中,委托是一种类型,这个类型可以用函数赋值。1.委托的定义 delegate void IntMethod(int x); delegate是关键字,void IntMethod(int x) 是函数签名。表示该委托接受有一个int型参数,返回值为void的函数。2.委托的实例IntMethod method = new IntMethod(PrintInt);...原创 2018-07-14 16:24:54 · 229 阅读 · 0 评论 -
C#中的异步线程
1.通过委托,开启异步线程 Action是委托类型,BeginInvoke 开启异步线程。正常情况下,Main线程是顺序执行的,但是开启异步线程后,程序的执行顺序由调度决定。执行结果可能先输出"Main",后输出"Method",也可能是相反顺序。static void Method(string str){ Console.WriteLine(str);}static ...原创 2018-07-25 14:46:45 · 6701 阅读 · 0 评论 -
C#中的特性
C#中的特性,允许向程序的程序集增加元数据,用于保存程序结构信息。1.Obsolete Obsolete特性标记方法已被弃用。并在代码编译时,显示警告信息。[Obsolete("该方法已被弃用")]static void OldMethod(){ Console.WriteLine("OldMethod");}2.Conditional Con...原创 2018-07-25 11:11:49 · 1309 阅读 · 0 评论 -
c#中的Type类
Type类,用来包含类型的特性。对于程序中的每一个类型,都会有一个包含这个类型的信息的Type类的对象,类型信息包含数据,属性和方法等信息。1.生成Type对象 有两种方法可以生成Type类的对象:一种是Typeof(类名),一种是对象调用GetType()函数。 Type type = typeof(Person); Person person = new ...原创 2018-07-18 21:55:59 · 13860 阅读 · 0 评论 -
C#中的正则表达式
正则表达式 是一种匹配文本的模式。常用函数IsMatch 判断字符串是否与正则表达式匹配Match 返回字符串中符合正则表达式的第一个匹配项Matches 返回字符串中符合正则表达式的所有匹配项Replaces 将字符串中符合正则表达式的字符串替换为另一个字符串Split 使用正则表达式匹配的位置,将字符串拆分成字符串数组定位元字符 ^ 匹配必须出现在字符串开头或者行的开头 $ 匹配必须出现在字符...原创 2018-07-04 21:29:50 · 912 阅读 · 0 评论 -
C#中的string类
string是c#中常用的类型,关于它的使用总结如下。Length计算字符串长度,即包含字符的个数。 string str = "April"; int len = str.Length; //len = 5==字符串比较,等于0表示字符串相等。string str = "April";bool res = str == "...原创 2018-06-28 22:13:01 · 655 阅读 · 0 评论 -
C#中的StringBuilder类
初始化 StringBuilder build = new StringBuilder("Hello"); //初始字符串 StringBuilder build1 = new StringBuilder(20); //初始空的字符串对象,容量为20 StringBuilder build2 = new StringBuilder("Hello", 20);...原创 2018-06-30 08:52:08 · 453 阅读 · 0 评论 -
c#内置了几个常用委托Action、Func、Predicate
一、ActionAction封装的方法没有参数也没有返回值,声明原型为:public delegate void Action();二、Action<T>Action<T>没有返回值,可以有多个参数,,两个参数的声明原型为:public delegate void Action<in T1, in T2>(T1 arg1, T2 arg2);三、Func<...原创 2018-06-01 14:45:49 · 521 阅读 · 0 评论 -
序列化与反序列化
定义 序列化是指将对象转换成字节流,从而存储对象或将对象传输到内存、数据库或文件的过程。 它的主要用途是保存对象的状态,以便能够在需要时重新创建对象。 反向过程称为“反序列化”。public class Serializer { //将类型序列化为字符串 public static string Serialize<T>(T...原创 2018-06-12 17:23:07 · 268 阅读 · 0 评论 -
线程池ThreadPool
创建线程需要时间,如果有很多小任务需要完成,则可以事先创建许多线程,需要时随时取用。 系统提供ThreadPool类管理线程。这个类会在需要时增减线程池中线程的数目,直到达到最大线程数。 线程池中最大线程数是可配置的,大于此数目的请求将保持排队状态,直到线程池线程变为可用。也可以设置创建线程池时应立即启动的最小线程数。 线程池中的线程都是后台线程,不能修改为前台线程,也不能给入池的线程设置优...原创 2018-07-28 16:22:12 · 354 阅读 · 0 评论 -
c#泛型+委托扩展冒泡排序
1.Employee类 Employee类中包含姓名和薪水,自定义的比较方法是按照薪水的多少。 class Employee { public string Name { get; private set; } public int Salary { get; private set; } public Employee...原创 2018-07-14 22:59:31 · 612 阅读 · 0 评论 -
文件读写操作
1. FileStream FileStream比较适合读写二进制文件。 FileMode 指定操作系统打开文件的方式,FileMode 包含以下方式。CreateNew 创建新文件, 如果文件已存在,则将引发System.IO.IOException异常。 Create 创建新文件, 如果文件已存在,它将被覆盖。 Open 打开现有文件,如果文件不存在,引发一个 System...原创 2018-08-01 14:31:46 · 303 阅读 · 0 评论 -
C#中的Thread
1.通过Thread对象开启线程1.1函数调用 首先用new申请Thread对象,然后对象调用Start()方法启用线程。 Thread.CurrentThread.ManagedThreadId获取当前线程的ID,便于管理。class Program{ static void DownLoad() { Console.WriteLine...原创 2018-07-28 12:52:19 · 14216 阅读 · 2 评论 -
File读写文件
File类中包含一些静态函数,用于读写文件。1.文件路径var path = Path.Combine(Environment.CurrentDirectory,"April.txt");2.读文件ReadAllBytes 打开一个二进制文件,将文件内容读入一个字节数组,然后关闭该文件byte[] buffer = File.ReadAllBytes(path);strin...原创 2018-07-31 22:54:21 · 4353 阅读 · 0 评论 -
FileInfo和DirectoryInfo
FileInfo读取文件属性,DirectoryInfo读取文件夹属性。1.FileInfo 首先在工程中创建txt文件 ,设置属性“复制到输出目录 - 如果较新则复制”。在工程运行时,会自动将该txt文件复制到bin下面。class Program{ //复制到输出目录 - 如果较新则复制 static void Main(stri...原创 2018-07-31 21:53:16 · 1121 阅读 · 0 评论 -
实现MyList类
自己动手实现了MyList类,主要包含的操作有:Capacity 获取容量大小 Count 获取元素个数 Add 添加元素 Insert 插入元素 RemoveAt 删除指定位置的元素 [] 索引器访问元素 IndexOf 取得元素的索引位置,从前向后搜索,找到元素时即返回。找不到元素时,返回-1。 LastIndexOf 取得元素的索引位置,从后向前搜索,找到元素时即返回...原创 2018-07-30 17:00:54 · 4347 阅读 · 0 评论