c#
奇点码农
不看书就跑步,身体和思想总要有一个在路上!
展开
-
.Net6.0系列-8 依赖注入(一)
3.ServiceCollection用来构造容器对象IServiceProvider,调用ServiceCollection的BuliderServiceProvider()创建ServiceProvider,可以用来获取BuliderServiceProvider()之前ServiceCollection中的对象。服务(Service):和框架请求之后返回的一个对象,可以是一个数据库链接,也可以是一个文件处理的方法,或者是数据处理的一个过程方法。服务容器:负责管理注册的服务。原创 2023-04-11 18:14:45 · 2035 阅读 · 1 评论 -
.Net6.0系列-7 .Net 6LinQ(三)常用扩展方法
四 LinQ使用建议:当需要计算大量数据,并需要瞬间完成的时候不建议使用LinQ,如图形处理图片中的每一个像素点的时候,需要瞬间完成,并将图片瞬间显示出来可以使用三元运算符/或者Math/或者自己使用基础算法写。where()的返回集合是Enumerable,返回的是T的全部字段,而Select是可以返回集合的任意需要的字段。一.投影:把集合中的每一项转换为另一种类型使用的是Select()方法。find()是在lamada表达式中的使用,以上两个是LinQ的使用。三 链式编程:多条件一起查询。原创 2023-03-25 16:27:50 · 336 阅读 · 0 评论 -
.Net6.0系列-6 .Net 6LinQ(二)常用扩展方法
LinQ的where返回的IEnumerable,所有的括号中都可以写lamada表达式,list,数组等都可以用LinQ。FirstOrDefault():返回第一条或者默认值,会在没有记录的时候返回null,所以建议在编程的时候使用这个方法。SingleOrDefault():最多只有一条满足要求的数据,0条记录则会返回0或者null,当有多条数据时会报错。Single():有且只有一条数据,First():至少有一条,返回第一条数据,Any():判断集合中是否存在一条数据,返回的是布尔类型。原创 2023-03-25 13:46:39 · 602 阅读 · 0 评论 -
.Net6.0系列-5.Net 6LinQ(一)揭秘及优势
2.Net中定义了泛型委托Action(无返回值)和Func(有返回值),所以一般不用自定义委托类型。二:匿名委托的使用,这里主要是一步一步的从委托类型的写法,转换为Lamada表达式的写法。一.LinQ让数据处理变的简单,但是执行效率不一定最高, 本质就是委托。1.委托是可以指向方法的类型。3.c#中的var是强类型的。原创 2023-03-18 14:14:02 · 263 阅读 · 0 评论 -
.Net6.0系列-4.Net 6及以上异步编程Cancellation以及WhenAll/WhenAnyToken详解(三)
Cancellation详解以及在web开发使用情形,当用户关闭浏览器或者访问别的网页的时候该网页的请求如果在服务器端没有完成的,则服务器会自动终止访问请求,可以节省服务器资源。1.Task WhenAny(IEnumerable tasks):只要tasks中的任何一个Task完成,即可向下执行。2.Task WhenAll(IEnumerable tasks):等待tasks中的Task全部完成,才会向下执行。ThrowIfCancellationRequested():如果任务被取消,就抛出异常。原创 2023-03-12 10:55:15 · 542 阅读 · 0 评论 -
.Net6.0系列-3.Net 6及以上异步编程(二)
一.异步方法不等于多线程,异步方法的代码并不会自动在新线程中执行除非手动将代码放到新线程中二.为什么有的异步没有用async修饰async方法的缺点:1.异步方法会生成一个类,运行效率没有普通方法高 2.可能会占用非常多的线程标明async只是为了更方便的使用await,第二种没有使用async,如果需要将Task的结果拿出来进行操作的时候需要使用async和await三 .为什么尽量少使用Thread.Sleep();原创 2023-03-06 21:30:45 · 489 阅读 · 0 评论 -
C# 基础 Dictionary(字典)和ConcurrentDictionary(线程安全的字典)
https://blog.csdn.net/weixin_41561640/article/details/106868304转载 2022-02-19 09:58:34 · 2878 阅读 · 0 评论 -
C#中Hashtable用法详解(包括线程同步)
本博客参考了:https://www.cnblogs.com/xpvincent/archive/2013/01/15/2860841.html使用HashTable的情况:1.数据量很大 2.高频查询 3.数据类型不唯一基本操作://添加一个keyvalue键值对:HashtableObject.Add(key,value);//移除某个keyvalue键值对:HashtableObject.Remove(key);//移除所有元素: HashtableObje原创 2022-02-18 17:10:04 · 1238 阅读 · 0 评论 -
WinForm和WPF中使用字体图标ICON
Winform中使用桌面图标:1.从https://www.iconfont.cn/ 网址下载对应的图标2.新建一个Winform项目,创建字体类(1)图中1是在突变网站下载的字体,放到根路径下(2)引用对应的字体3.Winform使用范例注意使用格式如框中所标,4.Wpf使用范例,与winform的Text使用格式不一致,引用路径方式也不一样5....原创 2022-02-16 15:11:02 · 2236 阅读 · 0 评论 -
c#自定义控件(2)-修改属性
绘制控件text的方法/// <summary> /// 绘制text /// </summary> class MyControlTmp:Control/*继承Control类*/ { public string TxtInfor = string.Empty; public MyControlTmp(string txt) { this.BackColor = Color.W原创 2021-08-07 08:42:07 · 1048 阅读 · 0 评论 -
c#自定义控件(1)-gdi基础
自定义控件,首先需要会使用GDI+绘制,下面是代码段基本各种常用的都有,注释也很清楚,然后工具箱中就会出现该控件1.新建一个cs文件,继承Control在这里插入代码片using System;using System.Collections.Generic;using System.Drawing;using System.Drawing.Drawing2D;using System.Linq;using System.Text;using System.Threading.Tasks;原创 2021-08-05 11:22:32 · 919 阅读 · 0 评论 -
c#调用Excel中的函数
在开发过程中不可避免的遇到使用公式来计算数据,可以自己写一些算法,也可以通过引用Excel中的公式来计算,可以挺高开发效率,还能避免错误下面是一个求公差的例子代码如下:Microsoft.Office.Interop.Excel.ApplicationClassexcel=newMicrosoft.Office.Interop.Excel.ApplicationClass();double[] arr=new double[]{1,2,3,4,5,6,7,8,9};doubl...原创 2021-04-22 17:41:48 · 1599 阅读 · 0 评论 -
线程池强制终止的解决方案
在控制软件的开发过程中,有可能会出现强力终止程序的情况,但是你又使用了线程池,无法跳出程序,因为如果出现异常之后,多运行一行代码就可能会造成设备的损坏,但是不使用线程池的话又会造成系统性能降低。可是线程池本身不提供强制退出,只能通过IsCancellationRequrest退出线程,虽然强制退出可能造成其他问题,但是在控制软件中非常实用。这里提供一种使用线程和线程池结合的方法,通过强制退出线程来终止线程池的执行。 说白了就是把线程池嵌入到线程中使用,如果需要暴力终止,就直接调用线程的...原创 2021-04-20 11:16:02 · 1492 阅读 · 0 评论 -
winform实现控件透明(实现真透明)
使用BackColor=Color.Translate这种方法只能实现和背景色一样但是不是真的透明,控件后面的控件还是看不到1.首先写一个基类using System;using System.Collections.Generic;using System.Text;using System.Windows.Forms;using System.Drawing;using System.ComponentModel; namespace CYControls{ /// &原创 2021-04-19 15:59:17 · 7777 阅读 · 22 评论 -
序列化与反序列化高级应用
在进行系统开发的时候序列化与反序列化在保存系统参数时可以有很大优势,比如不需要修改数据库增加字段直接修改实体就可以了,这一点对于上位机开发非常有帮助,因为上位机的电脑一般不联网,所以在上位机进行参数保存的时候建议使用序列化,但是运行参数不建议使用序列化,所谓的其实就是按照xml的方式将数据以流的方式存入数据库里面,当需要数据的时候反序列化成实体类。1.创建可以保存流文件的表#region 创建数据库Dictionary<string,string> sqlDic=new Dictio原创 2021-04-19 11:37:00 · 169 阅读 · 0 评论 -
串口通信基本知识及实例开发2(Com口通信开发实例)
上一篇讲的是Com通信的基本知识,这一篇讲一下Com开发实例首先,找一个com头,有公母之分,现在一般都是Usb转Com的,短接一下Com头的2(接收pin)/3(发送pin),然后就可以进行测试了在短接的时候注意一下别短接错了,使用winform做出如下的界面1.定义一个SerialPortprivate SerialPort ComDevice=new SerialPort();...原创 2021-02-03 10:52:50 · 1753 阅读 · 6 评论 -
文件读写操作(StreamWriter/StreamReader)
本文简单介绍一下文件的读写操作读取文件//读取txtprivate void readfile(string path){ string str=string.Empty; using(StreamReader reader=new StreamReader(path,Encoding.UTF8)) { //1.直接全部读出 str=reader.ReadToEnd(); } }//读取txt的最后一行数据循环读取每一原创 2021-01-15 16:32:09 · 875 阅读 · 0 评论 -
Zxing一维条码/二维条码生成与读取开发实例
Zxing是一个免费的条码处理软件,可生成一维码、二维码并进行读取。注释中有功能介绍1.下载Zxing的.Net类库,并引用zxing.dll,zxing.presentation.dllusing ZXing;using ZXing.Common;using ZXing.QrCode;2.生成一维码,并保存图片//定义变量private int cw=200;private int ch=200;//定义路径private string path=AppDomain.C原创 2021-01-08 12:19:45 · 2804 阅读 · 0 评论 -
Task用法详解
一. Task的创建和运行,Task有如下三种方法创建//Task的创建与运行static void Main(string[] args){ //1.new 方式实例化一个Task,需要通过Start方法启动 Task task=new Task(()=> { Thread.Sleep(1000); Console.WriteLine($"hello,task1的线程ID为:{0}",Thread.CurrentThread.Mana原创 2020-12-31 15:42:19 · 7378 阅读 · 0 评论 -
C#中的委托与事件实例详解
本人博客中的代码都是本地测试通过后,手敲上来的,会有敲错的情况,但是意思和注释理解了就行本篇文章引用张子阳博客基本思路,然后根据自己的经验,进行了部分的简化和修改,委托就在于理解,多看几遍就理解了。委托:本质上讲委托是一种可以将方法作为参数的方法,可以包含参数也可以不包含参数事件:从本质上将也是委托,只不过是进行了封装的委托。事件可以绑定方法,绑定之后就会监视这些方法,当达到事件的触发条件,就会执行事件绑定的方法如果比较绕口的话请读10遍就理解了分五个步骤:1.委托将方法作为参数传递原创 2020-12-24 15:21:55 · 1919 阅读 · 0 评论 -
读取图片的方法
public object GetImage(string path){ FileStream fs=new FileStream(path,FileMode.Open); try { Image img =Image.FromStream(fs); return img; } catch(Exception ex) { throw ex; } finally { fs.原创 2020-12-22 17:42:43 · 228 阅读 · 0 评论 -
WinForm控件自适应(实现不同像素自适应,字体自适应,改变窗体大小自适应)
今天给大家上一道硬菜。本来不爱鸡汤,今天说两句:winform开发有一个缺陷就是不能实现界面的自适应,切换不同的分辨率,或者窗体大小改变就会出现窗体显示不全的问题。这就需要自己写一个方法来实现不同情况下的自适应,WPF比Winform的一个显著优势就是可以实现自适应。今天给大家一个可以实现自适应的方案。(本篇博客代码,为本人,在本地调试通过后,手敲到博客中,难免出现敲错的状况,勿喷。代码里面的注释是比较清楚的)新建一个AutoSizeFormClass.cs文件class AutoSizeForm原创 2020-12-22 11:20:49 · 9151 阅读 · 19 评论 -
ProgressBar颜色显示
(本人博客代码部分全部为测试通过后手敲,有可能敲错单词,勿喷)先看效果图:首先新建一个ProgressBar.cs文件在这个文件里面增加写入下面的代码:public calss MyProgressBar:ProgressBar{ public MyProgressBar() { base.SetStyle(ControlStyle.UserPaint,true); } //重写OnPaint方法 protected ove原创 2020-12-17 11:31:17 · 563 阅读 · 0 评论 -
Socket通信实例详解
Socket通信可实现服务器和客户端进行通信,通过socket来实现监听/接收/发送。依据通信步骤实现通信。服务器端界面以及代码:服务器端开始监听的通信步骤:1.创建一个用于监听连接的Socket对象2.指定端口号和服务器的ip建立一个EndPoint对象3.用socket对象的Bind()方法绑定EndPoint4.用socket对象的Listen()方法开始监听5.接收到客户端的连接,用socket的Accept()方法创建一个用于和客户端进行通信的Socket.原创 2020-12-16 16:41:30 · 1532 阅读 · 0 评论 -
Chart用法详解
实际的开发过程中chart是可以自己使用gdi来自己画的,但是处理特殊情况可能还是不如系统自带的控件。花了一天的时间研究了一下chart。把一些基本的功能算是研究明白了,主要是折线的显示,用于数据分析,增加参考线,超警戒线区分显示,离散点/点线连接基本满足需要了。上硬菜(手敲代码,会有一点小bug,想用的可以修改一下使用,勿喷):Chart主要属性:ChartArea:在容器内创建多个Chart表Series:设置多组数据的显示(比如一个Chart里面可以出现多条折线)Title:设置C原创 2020-12-11 14:34:41 · 6450 阅读 · 0 评论 -
快速生成代码片段
在开发过程中有一写代码重复的使用,而且不能重构。可以使用代码生成管理器进行快捷键的绑定,提高开发效率。工具--》代码片段管理--》c# --》Visual C#可以自己写vscsf文件自己定义快捷键和生成代码片段...原创 2020-09-29 11:29:07 · 533 阅读 · 0 评论 -
自定义对话框详解
不鸡汤上干货本篇博客内容:讲解如何自定义对话框,并且介绍如何使用(纯手敲,会有点小错,自己改下吧),本功能也可以适用于不同的窗体之间传递参数可解决问题:系统默认对话框的单调问题,f翻译问题(如果在中文系统下使用英文软件对话框为中文模式,除非设置语言包为中文)第一步:创建窗体创建MesDiag窗体,并添加两个按钮设置FormBorderStyle属性为FixedDialog,添加两个按钮,一个Label lbl显示信息,分别命名为btnOK/btnNGbtnOK的Click动作下添加.原创 2020-09-09 10:25:39 · 692 阅读 · 0 评论 -
c#关闭操作系统
Process p = new Process();p.StartInfo.FileName = "cmd.exe";p.StartInfo.CreateNoWindow = true;p.StartInfo.UseShellExecute = false;p.StartInfo.RedirectStandardError = true;p.StartInfo.RedirectStandardInput = true;p.StartInfo.RedirectStandardOutpu原创 2020-08-12 18:27:55 · 378 阅读 · 0 评论 -
Contextmenustrip动态添加多级菜单
1.如果只是一级菜单就解决的话,使用控件Contextmenustrip,动态添加ToolStripMenuItem就可以了,自己设置一下name/click/text的属性就可以了2.如果是多级菜单呢,需要注意以下问题(代码部分是手敲的,大小写有点问题,想用的改一下就可以了)ToolStripMenuItem强制转换为ToolStripDropDownItem类型才能添加子项,其实你...原创 2019-12-26 09:56:38 · 2213 阅读 · 0 评论 -
向字符串中指定位置添加字符串
如果需要向字符串中特定位置添加,可以将字符串转化为StringBuilder类public static void main (String [] args){ String str="20190605"; StringBulider sb=new StringBuilder(str); sb.insert(6,"-"); sb.insert(4,"-"); ...原创 2019-12-07 14:16:18 · 1681 阅读 · 0 评论 -
字符串直接计算结果(datatable)
DataTable dt = new DataTable(); var Result= dt.Compute("1+2*3+2", "");//将运算字符串转换成表达式运算 NumberTxt.Text = Result.ToString()如果用c#编译器来实现的话会很慢一次编...原创 2019-10-23 11:42:59 · 418 阅读 · 0 评论 -
List<T>筛选最大值和最小值的方法
这里只有最大值的方法,最小值Min就好了。在C#的List集合操作中,有时候需要查找到List集合中的最大值,此时可以使用List集合的扩展方法Max方法,Max方法有2种形式,一种是不带任何参数的形式,适用于一些值类型变量的List集合,另一种是带Lambda表达式书写形式的,此方法可适用于获取List集合中某一个属性的最大值。(1)不带任何参数的Max方法形式举例,程序调用形式如下:...原创 2019-10-22 18:53:48 · 6985 阅读 · 0 评论 -
List<T>精解
泛型常用的情况是两大类List<string>和List<T>Add:很简单,直接Add就行了Remove:举例:List<string>的Remove1. List<string> list=new List<string>{"aa","aa","bb","cc"};list.remove("aa"); 结果:l...原创 2019-10-17 09:23:27 · 250 阅读 · 0 评论 -
Indexof与Substring的用法
Substring通常和indexof(或者lastindexof)来截取字符串例如:截取"_",后面的字符indexof()的开始位置需要加1,后面的长度需要减1因为index计算时第一个字符为位置0,,而下划线后面的长度需要加1来补1,举例截取aa字符串最后一个下划线,后面的字符:string aa=A_AAAAA_.AAA_AAA;aa.substring(aa.last...原创 2019-02-26 14:02:14 · 1604 阅读 · 0 评论 -
C#加载Winform窗体不成功--提示控件未定义
出现这种情况有两种原因:1.你在删除控件的方法的时候没有在属性窗口删除而是直接删除,导致该窗口的disginer界面中依然存在该方法的调用,可直接转入desiginer界面注释掉该方法的引用即可2.所有winform界面均报这个错误,可以先不管,然后,点击重新生成解决方案,并运行程序,如果能够运行成功则报错会消失...原创 2019-02-12 09:24:12 · 2007 阅读 · 0 评论 -
向datagridview中遍历添加数据
当新加了一个datagridview时,向该datagriview赋初值的时候,应该按照以下的方法添加数据,否则报错for (int i = 0; i < 8; i++) { int index = dgv.Rows.Add();//添加一行 for (int j = 0; j < 12; ...原创 2019-02-15 13:47:09 · 1784 阅读 · 0 评论 -
Datagridview绑定List泛型数据源的注意事项
当Datagridview需要绑定List<**Entity>泛型的数据源的时候需要注意:1.DataPropertyName要绑定对应的字段;2.最好使用BindingList方式绑定,可以同步数据的变更 dataGridView_tipsbox.DataSource =new BindingList<Entity.**>(**);3.如果不需要dataG...原创 2019-01-08 16:04:08 · 1034 阅读 · 0 评论 -
Tabcontrol的用法总结
1.如果你要重绘的话,需要先将DrawMode属性设置一下: tabControl_**.DrawMode = TabDrawMode.OwnerDrawFixed;2.在重绘的过程中,如果需要修改标签的大小的会可以在ItemSize中设置,但是首先你需要先设置一下sizemode属性为fixed,才可以修改标签的ItemSize属性3.重绘的方法网上还是不少的我就不写了...原创 2019-01-08 11:33:45 · 3015 阅读 · 0 评论 -
c#中的字符串多个空格合并为一个空格的方法
#region 字符串中多个连续空格转为一个空格 /// <summary> /// 字符串中多个连续空格转为一个空格 /// </summary> /// <param name="str">待处理的字符串</param> /// <returns>合并空格后的字符串</returns> public sta原创 2019-01-18 10:05:04 · 2028 阅读 · 0 评论 -
C#调试不能进断点的解决方法
用C#写代码的时候调试是少不了的,如果进不了断点,主要有以下几种情况:1.VS有两种模式,在Debug模式下才能进入断点2.工具-选项-调试-常规-要求源文件与原始文件始终匹配取消选择(选的话进不了断点)(这个我没试过)3.项目上右键-属性-生成-优化代码(不选择,选的话进不了断点) ...原创 2019-01-07 10:55:57 · 18482 阅读 · 3 评论