3.3 C#
语言关键知识点
哲学的天空
这个作者很懒,什么都没留下…
展开
-
C# Socket客户端断线重连的解决办法
https://blog.csdn.net/yangxiaozi/article/details/47003923原创 2020-03-17 21:16:57 · 3283 阅读 · 0 评论 -
C# 网络编程心跳机制
1.心跳机制概念: 由于网络阻塞,服务器宕机,停电,等等不确定因素,会导致socket无效,那么就需要一种方式检测socket是否正常连接,通常使用客户端和服务器端间隔固定一段时间发送一次数据,对方收到并回应,就表明socket正常,这种方式叫心跳机制。2.心跳包的实现思路: 客户端连接上服务端后,在服务端会维护一个在线客户端列表。客户端每隔一段时间,向服...转载 2020-03-17 21:13:56 · 2448 阅读 · 0 评论 -
C# 网络传输消息队列
1. 消息队列概念: 用于存储网络发送过来的消息,因为接受数据是单独的线程,所以需要把数据存储到队列中,主线程从队列中循环取出数据,根据数据意义执行不同任务。根据后进后出原则,选择Queue数据结构。2. 队列1 : 使用locker 实现。 //队列 用于存储网络传过来的消息 public class MessageControl { ...原创 2020-03-17 21:04:03 · 592 阅读 · 0 评论 -
C# socket和多线程开发
//创建监听void startListing() { try{ //创建一个负责监听的socket Socket socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPAddress ip = "192.168.1.2";// IPAddres...原创 2020-03-16 14:39:52 · 1328 阅读 · 0 评论 -
C#中提高绘制控件时的效率
C#中提高绘制控件时的效率 - Lassewang的成长历程_CSDN博客https://blog.csdn.net/lassewang/article/details/6854849关于Graphics绘图效率问题https://bbs.csdn.net/topics/390759006有没有加上这一句窗体创建时有没有加上这句 form1.DoubleBuffered:=true;用G...原创 2020-03-16 11:47:07 · 854 阅读 · 0 评论 -
C# 异步委托 async/await
1.async/await 概念:async/await是C# 5.0 推出的,async用来修饰方法, 表明这个方法是异步的,声明的方法的返回类型必须为: void Task 或 Task<TResult> : 就是有返回值的Task,TResult就是返回值类型,比如Task<int> 返回值为int 值。await必须用来修饰Task 或 Task<...原创 2020-03-16 11:42:08 · 1363 阅读 · 0 评论 -
C# 异步委托 Task
1.Task概念: Task是在 .NET Framework 4中添加进来的,Task的背后实现也是使用了线程池线程,但它的性能优于ThreadPool,因为它使用的不是线程池的全局队列,而是使用的本地队列,使线程之间的资源竞争减少。同时Task提供了丰富的API来管理线程、控制。2.Task的建立和启动: a. 创建Task有两种方式,一种是使用构造函数创建,...原创 2020-03-16 11:38:14 · 1337 阅读 · 0 评论 -
C# 异步委托 BeginInvoke EndInvoke
1. 简单主线程中委托:static void Main(string[] args){ //定义一个委托,并初始化 Func<int, int, string> delFunc = (a, b) => (a + b).ToString();//黄色底纹部分换成{ return (a + b).ToString(); }更好理解 //同步方法调用(跟调用一个方法一样...原创 2020-03-16 11:30:41 · 1954 阅读 · 0 评论 -
C# 线程安全及线程同步技术
1. 线程安全及线程同步技术概念: 线程安全:就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。 线程同步技术:是指多线程程序中,为了保证后者线程,只有等待前者线程完成之后才能继续执行。就好比买票,前面的人没买到票之前,后面的人必须等待。所谓同步:是指在...原创 2020-03-16 11:16:18 · 337 阅读 · 0 评论 -
C# 线程池 ThreadPool
1.线程池整体概括:创建线程还是比较简单的,但是由于线程的创建和销毁需要耗费一定的开销(默认情况下,主线程占用1M,子线程占用512KB,线程越多,占用内存也越多),过多的使用线程反而会造成内存资源的浪费,从而影响性能,出于对性能的考虑,于是引入了线程池的概念。 线程池并不是在CLR初始化的时候立刻创建的,而是在应用程序要创建线程来执行任务的时候,线程池才会初始化一个线程,初...原创 2020-03-16 11:03:26 · 2382 阅读 · 0 评论 -
C# 跨线程访问及UI界面多线程更新方法
1. 跨线程访问出现错误例子:点击“测试”,创建一个线程,从0循环到10000给文本框赋值,代码如下:private void Button1_Click(object sender, EventArgs e){ //创建一个线程去执行这个方法:创建的线程默认是前台线程 Thread thread = new Thread(new ThreadStart(Test));...原创 2020-03-16 10:37:53 · 8812 阅读 · 2 评论 -
C# 线程及使用
1. 进程和线程概念: 进程(process): 应用程序的实例要使用的资源的集合。每个进程被赋予了一个虚拟地址空间,确保在一个进程中使用的代码和数据无法由另一个进程访问。 线程(thread): 线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针,程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。2.创建线程的目的是什么?...原创 2020-03-16 10:22:09 · 1734 阅读 · 0 评论 -
C#委托的介绍(delegate、Action、Func、predicate)
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。事件是一种特殊的委托。1.委托的特点: 委托类似于 C++ 函数指针,但它们是类型安全的。 委托允许将方法作为参数进行传递。 委托可用于定义回调方法。 委托可以链接在一起;例如,可以对一个事件调用多个方法。 方法不必与委托签名完全匹配。2. 四种委托的区别: Delega...转载 2020-03-16 09:53:25 · 186 阅读 · 0 评论 -
C#自己实现定时器
我们在写winfrom时经常会用到定时器,比如客户端通过socket定时向服务器发送检测包等。.netframework提供了一个定时器控件System.Windows.Forms.Timer,使用很方便。其实通过C#多线程也可以实现定时器功能。我的做法大致为:新开一个线程用于计时,当时间间隔过后用事件timerover实现主窗体中的定时函数,再通过调用contro.invoke方法返回主窗...转载 2020-03-13 11:49:01 · 1695 阅读 · 0 评论 -
C# 开发一个简单的Http服务器及客户端
代码来自网络,有部分修改Http 服务器端:/* * * C#实现了一个最简单的HTTP服务器类,你可以将它嵌入到自己的项目中,或者也可以阅读代码来学习关于HTTP协议的知识。 * 高性能的WEB应用一般都架设在强大的WEB服务器上,例如IIS, Apache, 和Tomcat。然而,HTML是非常灵活的UI标记语言, * 也就是说任何应用和后端服务都可以提供HTML的生成支...原创 2020-03-09 17:16:41 · 10343 阅读 · 4 评论 -
C# 使用操作Json数据
C#中主要用Newtonsoft.Json 库来操作Json数据。 例子如下:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using Newtonsoft.Json;using N...原创 2020-03-09 17:05:14 · 436 阅读 · 0 评论 -
C# 事件系统
public class CallBack { public double _time; public bool _dirty; public Action<JsonObject> _action; public CallBack() { _time = 0f; ...原创 2020-03-06 17:27:50 · 606 阅读 · 0 评论 -
This 关键字为原始类扩展方法
// Person 类// Person 类public class Person { /// <summary> /// 性别 /// </summary> public string Sex { set; get; } } // 辅助类public static class He...原创 2020-01-15 11:34:55 · 224 阅读 · 0 评论 -
C# 字符串 数组 IndexOf 方法
C#中数组和字符串都有IndexOf 方法。 String.IndexOf 和 Array.IndexOf 返回值都为int类型,没找到返回值都为-1.1.String.IndexOf 方法从左到右查找子串在母串中的索引值。int []arr = new int[3]{5, 8, 9};int idx = Array.IndexOf(arr, 5); ...原创 2020-01-06 11:46:49 · 8255 阅读 · 0 评论 -
c# ftp 上传文件 与 下载文件
//连接ftp private void Connect(String path) { // 根据uri创建FtpWebRequest对象 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(path)); // 指定数据传输类型 ...转载 2019-06-04 15:58:59 · 387 阅读 · 0 评论 -
C# 使用Socket开发一个简单服务器及客户端
客户端:ClientControl.csusing System;using System.Collections.Generic;using System.Linq;using System.Net.Sockets;using System.Text;using System.Threading;using System.Threading.Tasks;namespac...原创 2019-06-05 22:24:45 · 363 阅读 · 0 评论 -
C# 常见知识点
1>:获取电脑文档目录Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)2>:获取电脑临时存储目录GetTempPath 3>:获取集合只读存储AsReadOnlyArray.AsReadOnly<T>List<T>.AsReadOnly若要防止对数组进行任何修改,应该仅通过此包...原创 2018-02-23 18:02:31 · 2549 阅读 · 0 评论 -
C# Winform项目中添加 Log4net 日志库
1. 下载log4net库文件:http://logging.apache.org/log4net/download_log4net.cgi2. 在项目中引用 log4net.dll3.在项目Properties->AssemblyInfo.cs文件中 添加[assembly: log4net.Config.XmlConfigurator()]4. 在App.config中...原创 2019-06-16 16:26:58 · 5053 阅读 · 0 评论 -
C#测试代码执行效率的3种方式
1.Stopwatch类Stopwatch sw = new Stopwatch();sw.Start();//do something sw.Stop();TimeSpan ts = sw.Elapsed;Console.WriteLine(ts);运行时间 = timer.Elapsed.TotalMilliseconds;单位是毫秒,精确到万分位。如果不要求到如...转载 2019-07-10 16:17:05 · 984 阅读 · 0 评论 -
C# 进行 MySQL连接 增删改查操作
static void connMySQL(){ //MySQL建立连接 string connectStr = "server=127.0.0.1; port=3306; database=editorserver; user=root; password=123456;"; MySqlConnection conn = new MySqlConnection(connectS...原创 2019-06-05 16:59:43 · 1624 阅读 · 0 评论 -
VS2013 C#项目中添加引用Mysql.data.dll 还是提示无法找到命名空间MySql.Data问题
MySql.Data.dll 版本问题导致,改用 v4.0 v4.5 版本。原创 2019-02-26 13:26:43 · 3190 阅读 · 0 评论 -
XNA文字绘制
使用SpriteFontX 库:链接:https://pan.baidu.com/s/1vlLEz0EXE3KRF9i9_XoJpQ 提取码:n2sw例子:SpriteFontX spriteFontX1;spriteFontX1 = new SpriteFontX(new System.Drawing.Font("宋体", 12f), //设定字体,样式,大小 ...原创 2018-10-25 19:16:14 · 383 阅读 · 0 评论 -
C#中链表的用使用LinkedList
using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace 集合{ class 链表 { public static void Main() { //LinkedList<T>集合类没有非泛型类的版...原创 2018-04-25 15:45:19 · 13508 阅读 · 0 评论 -
C# 双向链表及自定义链表
一、双向链表LinkedList<T> LinkedList<T>集合类没有非泛型集合的类似版本。LinkedList<T>是一个双向链表,其元素指向它前面和后面的元素。 链表的优点是,如果将元素插入列表的中间位置,使用链表会非常快。在插入一个元素时,只需修改上一个元素的Next引用和下一个元素的Previous引用,使它们引用所插入的元素。在Lis...原创 2018-04-25 15:45:13 · 320 阅读 · 0 评论 -
C#中的泛型
泛型(generic)是C#语言2.0和通用语言运行时(CLR)的一个新特性。泛型为.NET框架引入了类型参数(type parameters)的概念。类型参数使得设计类和方法时,不必确定一个或多个具体参数,其的具体参数可延迟到客户代码中声明、实现。这意味着使用泛型的类型参数T,写一个类MyList<T>,客户代码可以这样调用:MyList<int>, MyList<...原创 2018-04-25 15:45:08 · 649 阅读 · 0 评论 -
C# 开发常见问题
//----------------------------------------------------------------- 扩展控件 添加 用户控件 继承基本控件,扩展一些属性与事件。比如继承Button 步骤一:这里首先要建一个Windows控件库项目。 步骤二:新建用户控件,修改代码(注意注释掉.Designer.cs文件中的代码) 扩展Button 复制代码 ...原创 2018-04-25 15:44:48 · 556 阅读 · 0 评论 -
C# 简介
语言结构类:在C#中类的声明与C++和Java很相似。但是,不象C++,C#结构体C# Project[11]与类是不支持继承。但是,与Java相同的是,一个结构体可以实现接口(interface)。Java的关键字import已经被替换成using,它起到了同样的作用。类可以是抽象的和不可继承的:一个被申明成abstract的类不能被实例化,它只能被用做一个基类,C#关键字lock就像J...原创 2018-02-23 18:00:07 · 344 阅读 · 0 评论 -
C# 基本语法
在一小时内学会 C#。使用例程,简单却完整的探索 C# 语言的构造和特点。本文特别适合有 C++ 基础却没有太多精力学习 C# 的读者。 作者 Aisha Ikram 简介C# 是一种具有 C++ 特性,Java 样式及 BASIC 快速建模特性的编程语言。如果你已经知晓 C++ 语言,本文将在不到一小时的时间内带你快速浏览 C# 的语法。如果熟悉 Java 语言,Java 的编程结构...原创 2018-02-23 17:59:27 · 239 阅读 · 0 评论 -
Visual Studio 中配置 CSGL库环境
1.因为作四轴项目的需要(在上位机显示飞行器姿态),找了点时间学习了一下OpenGl,什么是OpenGL,OpenGL是一个功能强大的开放图形库(Open Graphics Library)。其前身是SGI公司为其图形工作站开发的IRIS GL。为使其能够更加容易地移植到不同的硬件和操作系统,SGI开发了OpenGL。从程序开发人员的角度来看,OpenGL是一组绘图命令的API集合。利用这些AP...转载 2018-03-30 11:08:10 · 925 阅读 · 0 评论 -
Visual Studio 中配置 CSharpGL库环境
新建Winform项目为了演示全部过程,我们新建一个项目"HelloCSharpGL"。刚刚新建的项目如下图所示。添加引用我们需要添加对CSharpGL各个类库的引用,如下图所示。如下图所示,添加这么几个类库:Utilities:含有一些辅助类型。CSharpGL:封装了OpenGL指令。CSharpGL.Maths:封装了对矩阵和向量的操作。CSharpGL.Objects:含有Camera、R...转载 2018-03-30 10:41:46 · 1536 阅读 · 0 评论 -
Visual Studio 中配置 SharpGL库环境
OpenGL就是3d绘图的API,微软针和它竞争推出D3D,也就是玩游戏时最常见的DirectorX组件中的3d功能。 所以不要指望windows提供对Opengl提供最新的什么支持。C#的开发环境也没有封装Opengl的组件,Opengl的官方的dll是供C,C++开发用的。要想用在C#中你得自己导入DLL函数。但我相信你不会这样做的,还是引入第三方的Opengl库来得方便。 SharpGL就是...转载 2018-03-30 07:50:23 · 2077 阅读 · 0 评论 -
IEnumerable,IEnumerator使用
1、首先看一个简单的例子int[] myArray = { 1, 32, 43, 343 }; IEnumerator myie = myArray.GetEnumerator(); myie.Reset(); while (myie.MoveNext()) { int i = (...原创 2018-04-25 15:45:26 · 687 阅读 · 0 评论 -
C#中的interface abstract与virtual介绍
abstract 与virtual : 方法重写时都使用 override 关键字,interface中的方法和abstract方法都要求实现nterface用来声明接口1.只提供一些方法规约,不提供方法主体. 如:复制代码代码如下:public interface IPerson{ void getName();//不包含方法主体}2.方法不能用public abstract等修饰,无字...原创 2018-04-26 14:58:50 · 152 阅读 · 0 评论 -
XNA几何图形绘制
绘制直线: public void drawLine(GraphicsDevice gd, Vector3 s, Vector3 e, Microsoft.Xna.Framework.Color color) { VertexPositionColor[] playerVision = new VertexPositionColor[2]...原创 2018-10-25 19:02:24 · 568 阅读 · 0 评论 -
XNA 开发环境安装
XNA Game Studio 4.0 支持VS2013安装包下载: https://pan.baidu.com/s/17DEP_12XtE9KlWpOAidVagXNA Game Studio 4.0 支持VS2015安装包下载: https://pan.baidu.com/s/1ZvXtbWwGcZUGH6ThBUWr-Q原创 2018-04-29 11:06:50 · 1364 阅读 · 0 评论