![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C#
文章平均质量分 67
故里2130
共同学习交流,包括C#,uniapp,H5,vue3,小程序,网站,客户端,数据库,后台接口等等,以及疑难的软件问题。
展开
-
c#多线程中使用SemaphoreSlim
4.我们对比方法一和方法二发现,他们的结果都是一样的,但是lock似乎比SemaphoreSlim更加的高效,是的,lock解决此业务的确比SemaphoreSlim高效。SemaphoreSlim是一个用于同步和限制并发访问的类,和它类似的还有Semaphore,只是SemaphoreSlim更加的轻量、高效、好用。当我们在第1步,只需要增加一句话,不增加lock和SemaphoreSlim,依然可以使得计算的结果准确,那就是增加。当我们增加SemaphoreSlim后,不管运行几次,结果都是正确的。原创 2024-01-12 21:30:41 · 1989 阅读 · 0 评论 -
C#深拷贝效率对比
本篇说一下,深拷贝的效率问题,效率一直是程序追求的,效率越高肯定越好,有时候功能是实现了,但是运行以及处理数据的效率非常低,此时就让人很头疼,当你知道了如何提高效率的时候,在你实现功能的时候,就已经考虑进去了,而不是先把功能做好,后期再优化(当然这种模式覆盖大部分人的开发习惯)。总结:总的来说,数据量在100W的时候,差距还是很明显的,建议使用表达式树,在10W数量的时候,表达式树和AutoMapper差距已经不是很大了,数据量再小的话,预计差别就更少了,具体使用,还是看程序的数据在什么量级。原创 2023-12-17 17:18:58 · 811 阅读 · 0 评论 -
C#浅拷贝和深拷贝数据
可见,修改testData1的D1的值后,test2的D1的值,并没有变化,这正是我们需要的,后续可以对testData1和test2的数据,分别进行业务操作。这里我们首先是先把对象转成字符串,再把字符串转成对象,效果和上面是一样的。这个就是浅拷贝,这种拷贝在程序场景中很少用到,不知道的人,偶尔会很奇怪。前面的数据结构依然不变,深拷贝在程序中运用的场景非常多,我们说4种方法。当修改testData1的D1的值后,test1的D1的值也改变了。共享地址的,修改第一份数据或者修改第二份数据,原创 2023-12-17 16:31:03 · 2747 阅读 · 0 评论 -
基于.net6的WPF程序使用SignalR进行通信
今天写一篇关于CS客户端的SignalR通信,后台服务使用.net6api。其实和之前写的差不多,主要在于服务端以后台进程的方式存在,而客户端以exe方式存在,其实代码都一样,只是生成的方式不一样。此时,后台的服务以进行的方式存在,然后可以和客户端进行通信,其实和之前写的是一样的,只是生成方式不同而已。之前写的SignalR通信,是基于.net6api,BS和CS进行通信的。当然IP和端口都可以修改的,也可以增加网页显示,根据业务而定。运行后,服务是以进程的方式存在。选择Windows应用程序。原创 2023-07-18 23:32:41 · 2592 阅读 · 0 评论 -
.net6中WPF的串口通信和USB通信
目前只是查询出来4个USB设备,但是对USB进行发送和接收信息,还有报错。这个似乎需要和硬件通信协议和数据传输规范有关系,否则好像成功不了,也不清楚可不可以使用虚拟的USB,类似于COM虚拟口一样操作,暂时这么记录吧。今天说一下,.net6中wpf的串口通信和USB通信,在工控行业中,这2种的方式非常多,还有网口通信,它们都是用来和硬件打交道的,进行交互信息。之前写过串口通信,不过是winform的。2.基本上代码都是一样的,xaml界面。一个写1端口,一个写2端口,进行通信。2.操作USB有2种方式。原创 2023-07-16 22:15:01 · 2803 阅读 · 2 评论 -
全栈开发小作品展示(有声音)
不积跬步,无以至千里;不积小流,无以成江海。原创 2023-03-18 15:06:03 · 421 阅读 · 1 评论 -
c#使用配置文件
在我们开发软件的时候,有时候有很多的配置文件,可以把配置的参数保存到本地,那么肯定要对文件进行读和写的操作,使用SharpConfig可以很简单的实现这个功能。而且设置值和修改值的时候, 有多种方式都可以做到,总体来说,还是很不错的,值得推荐使用。其中#开头的是注释内容,[]开头的目录,下面的具体值,就是key和value。3.在根目录中建立test.ini,其实别的后缀名文件也可以。每次修改值和增加值的时候,一定要保存文件,否则不会有效果。对于官网的介绍其实更加的丰富,也可以直接存对象。原创 2023-01-11 11:17:35 · 3785 阅读 · 1 评论 -
c#使用UDP进行聊天通信
UDP和TCP都是网络通信中不可缺少的部分,两者在不同的环境中,应用的场景不一样,UDP在网络不好的情况下,传输会丢包,也就是会丢数据,而TCP不会这样,所以重要的数据使用TCP传输,但是TCP对网络的资源消耗非常的大,例如视频,音频等大量的数据,这个时候就选择UDP,因为UDP占用网络资源比较低,就算丢一帧二帧的图像的数据,也不会有影响的。介于单播和广播之间,也叫组播,从名字上面就能知道,建立一个组,然后向组内的人员发送消息,就类似,微信临时拉一个群,指定群内的人,向群内通知信息。............原创 2022-08-13 22:05:30 · 5747 阅读 · 3 评论 -
c#枚举使用
业务环境是这样的,比如有很多命令,命令的格式都是#ETSDWd225,表示停止,等等若干个这样的命令,这时我们可以建立一个字典key,value去存储它,但是调用的时候就不是很方便,枚举在调用的时候,可以使用点,点出来,非常的方便,希望使用这个优点来解决这个问题。比如有很多命令,命令的格式都是#ETSDWd225,表示停止,我们随便写几个命令来表示业务的场景中的命令。3,但是当我们要输出中文的时候,这个时候就要进行变化,使用特性。我们可以把命令写描述里面,把注释写在枚举中,代码。......原创 2022-08-11 22:16:16 · 2038 阅读 · 0 评论 -
C#使用计时器
winform中可以使用的是:123WPF中可以使用的是:234其中23都不依赖窗体。原创 2022-08-09 10:31:00 · 17711 阅读 · 1 评论 -
C#远程调试
在我们日常生活中,经常遇到本机电脑可以运行程序,但是别的电脑无法运行程序,很多情况下,都是环境变量导致的。我们可以使用远程调试,只需要复制代码过去,而不用安装对应的vs软件,这样比较节约时间。对于其他使用vs开发的程序,例如网站或者c++程序等等,都可以使用此方法来进行远程调试。7.然后回到远程电脑上,点击软件上面的按钮,此时本机就会有断点进入了。6.输入远程的IP地址和端口号,点击查找,进行连接。1.在远程的电脑上,下载vs2022远程工具。2.在远程的电脑上,安装。3.在远程的电脑上,启动。...原创 2022-07-30 22:05:17 · 3131 阅读 · 0 评论 -
c#使用MQTT通信
mqtt的功能请看百度百科,MQTT_百度百科。这里简单说一下,mqtt的功能就是一个发布/订阅的功能例如,接下来,我们做一个例子。现在有A服务器作为发布方,B客户端作为订阅方。如果A发布了消息,那么会向B发送消息,反之亦然,从而进行通信的功能。一、A服务端代码1.建立一个.net5的web api项目2.nuget引用mqttnet3.MqttService代码4.MqttHostService代码5.在Startup注入代码6.增加一个服务器发送消息的方法 二、B客户端1.建立一原创 2022-07-07 00:25:42 · 25866 阅读 · 8 评论 -
C#验证码
环境是.net 5开发。1.建立一个项目2.代码3.效果 注意:如果是.net 5的项目,nuget中增加,System.Text.Encoding.CodePages原创 2022-06-28 17:03:30 · 871 阅读 · 0 评论 -
C#使用TCP进行聊天通信(详细解析)
TCP通信可以使用Socket和TcpListene进行通信,TcpListene是Socket的一个封装,可以更好的操作Socket,底层依然是socket。使用NetworkStream类,把流分别给BinaryReader读,BinaryWriter写。1.使用TcpListener实例化,得到服务器的ip和端口。两者区别不大,主要是NetworkStream类的使用。进行通信分为2部分,一个是服务端,一个是客户端。服务器收到消息后,把消息发给客户端。5.读取服务器的流,接收消息。...原创 2022-06-28 16:09:36 · 13091 阅读 · 4 评论 -
C#使用Autoupdater.NET
使用范围是winform和WPF1.建立一个.net5的winform项目,安装Autoupdater.NET.Official2.按钮下面增加代码 3.建立AutoUpdaterStarter.xml,可以参考GitHub上面这里的版本一定要大于软件运行的版本 4.建立 UpdateLog.html,里面内容随便写5.所有文件显示 更新内部的某一个或者几个dll也需要进行压缩即可,一起打包即可。注意:这里一定要是zip格式,否则报错 。6.在IIS上面发布能运行即可 7.运行,点击更新即原创 2022-06-17 11:39:52 · 2217 阅读 · 6 评论 -
C#winform嵌套另一个exe程序
一共有二种方法,也不知道作者从哪里复制来的,先感谢原作者。首先建立一个程序,加2个按钮,为了区分,界面修改成红色。第一种:1.建立一个主程序,加一个panel1,为了区分背景是绿色2.代码调用3.所有代码using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Diagnostics;using System.原创 2022-05-17 10:32:58 · 9533 阅读 · 21 评论 -
C#把dll分别放在指定的文件夹
C#客户端程序,生成后是一个exe,如果带有大量的dll,那么dll和exe会混乱在一起,看起来非常混乱,我们可以建立一个文件夹,把dll放进去,这样看起来就非常的清晰美观。一共有二种方法第一种,配置方法。1.我们建立一个winform程序,对2个dll分别引用,调用里面的方法生成后的文件是这样的2.打开App.config文件夹,其中dll和dll/2相当于文件夹3.选择所有的dll,把复制本地设置成 FALSE4.打开项目的exe路径,分别建立dll文件夹,把其中一个dll放进去。原创 2022-05-16 21:02:43 · 5363 阅读 · 10 评论 -
C#把dll打包到exe
把其他类库生成的dll,和现在的exe打包在一起,发给别人的时候,就发一个exe即可。1.建立一个类库项目代码生成dll2.建立一个winform项目3.在项目中把dll引用里面去4.把dll直接复制到项目的根目录中并且修改下面2项5.回到项目的界面上,在按钮中增加ClassLibrary1.dll的方法6.在启动的地方加上代码using System;using System.Collections.Generi...原创 2022-05-16 22:46:51 · 8877 阅读 · 27 评论 -
C#创建Windows服务
1.打开vs2019,建立Windows服务2.打开Service1.cs文件,写入代码using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Diagnostics;using System.IO;using System.Linq;using System.ServiceProcess;using System..原创 2022-05-15 23:13:55 · 4684 阅读 · 1 评论 -
C#发展历史,.NET Framework和.NET Core的历史版本
C#发展到现在已经20多年左右了,之前发展都是按照.NET Framework的版本发展,直到.NET Framework4.8结束。后来以.NET Core的版本发展,直到.NET Core3.1.3结束。最后把.NET Framework和.NET Core合并在一起,名称从.NET 5.0开始,最新已经到.NET 9.0了。1.NET Framework的版本发展历史。2.NET Core的版本发展历史。原创 2022-05-09 14:44:56 · 4580 阅读 · 0 评论 -
c#使用串口进行通信
要做到的效果是,A串口给B串口发送消息,B串口接收消息;B串口给A串口发送消息,A串口接收消息,形成实时通信的功能。1.安装Configure Virtual Serial Port Driver软件,这个软件可以虚拟出串口。界面是2.点击增加串口按钮,这个相当于创建了COM1和COM2串口,2个串口自动进行了关联3. 创建一个项目,界面如下4.界面代码namespace 串口通信{ partial class Form1 { /// ..原创 2022-04-30 14:37:46 · 8040 阅读 · 0 评论 -
c#使用句柄进行通信
这部分分为3部分。一、2个exe程序之间通信,第一个程序发送消息,第二个程序实时接收消息。二、2个exe程序之间通信,第一个程序发送命令执行第二窗口中的按钮事件。三、2个exe程序之间通信,第一个程序发送消息到第二个程序中的某一个控件中。一,2个exe程序之间通信,第一个程序发送消息,第二个程序实时接收消息。1.建立第一个程序,界面如下2.代码using System;using System.Collections.Generic;using System.Com原创 2022-04-27 12:29:31 · 2837 阅读 · 1 评论 -
c#使用redis进行聊天通信
redis的功能非常非常的强大,当做通讯的话,绰绰有余,安装问题请参考之前的文章,c#中使用redis。1.建立winform项目,在nuget中安装StackExchange.Redis2.创建聊天的界面3.代码using ServiceStack.Redis;using StackExchange.Redis;using System;using System.Collections.Generic;using System.ComponentModel;using.原创 2022-04-25 17:04:04 · 792 阅读 · 5 评论 -
c#中使用redis
1.在官网http://download.redis.io/releases/下载,下载后解压是这样的2.用cd命令进入该文件夹中,然后输入redis-server redis.windows.conf,回车后,看到这个界面就是成功的3.我这里安装了一个客户端redis-desktop-manager-0.9.0.559,有界面的管理Redis。这里要注意一下:如果没有增加到服务中,必须打开Redis命令窗口,否则测试连接不成功。下图是增加到了服务,可以用系统path,直接运....原创 2022-04-24 14:31:32 · 14219 阅读 · 4 评论 -
c#中使用MSMQ
MSMQ是微软自带的消息队列,可以当作通信工具使用,现在用它建立一个聊天的功能,一个服务端,多个客户端进行实时聊天系统。使用它之前,必须先进行配置。1.在Windows功能中先安装,如下图所示2.在计算机管理中,就会看到消息队列3.服务端代码,创建一个MQusing System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Dra.原创 2022-04-24 11:09:01 · 1713 阅读 · 3 评论 -
c#使用log4net日志
1.在Nuget中下载log4net2.增加App.config文件具体的配置可以查看资料,:<level value="ALL"/>,这个ALL就是记录所有的日志信息<file value="./RedLog.txt"/>,这个是路径,目前就是在debug下面<?xml version="1.0" encoding="utf-8" ?><configuration> <startup> <sup.原创 2022-04-18 13:47:25 · 4513 阅读 · 1 评论 -
c#读取xml配置文件
在实际开发中,我们需要用配置文件,这里说一下使用xml文件配置的方法。1.建立一个xml文件夹<?xml version="1.0" encoding="utf-8" ?><SystemParameter> <A desc="AAAAA"> <A1 desc="A1">A</A1> <A2 desc="A2">A2</A2> </A> <B> <原创 2022-04-12 16:10:14 · 1357 阅读 · 0 评论