- 博客(147)
- 资源 (11)
- 问答 (3)
- 收藏
- 关注
原创 论印度为什么软件行业这么发达(搞笑篇)
众所周知印度的教育水平和中国比,差的不是一点。网上都说印度其实只有一亿人,我是认同的。那么中国十四亿人,为什么软件业没有印度发达呢?经过我苦思冥想终于找到了原因:请想一想印度人的传统运动是啥?瑜伽。。。做瑜伽时讲究的是冥想,经查冥想其实是一种锻炼大脑的运动。排除掉语言优势(印度第一语言是英语,但是这种国家太多了),所以不能成立。所以我发现了一个软件行业的大秘密,就是冥想可以提高你的软件水平。感谢我吧!!!其实,乔布斯据说就是在印度找到的灵感,设计出的苹果(我没感觉哪里好用)......冥想锻炼...
2021-03-22 08:37:55 746
原创 C#与Java的比较
关于java和C#争论不是一年两年了,贬低C#的文章也看过了很多.说一下个人见解,C#本身并不是不如java,C#的优势在于学了之后在web和winform之间可以自由切换,web现在.net mvc已经效率很高了,企业级的应用现在很受欢迎,成熟的框架也不少,一个公司有一个大拿搞定框架,几百万的项目开发基本四个人就完成了,这一点和java不相上下.再说一下winform这一点c#是很...
2019-01-06 22:07:59 18081 3
原创 .Net6.0系列-8 依赖注入(一)
3.ServiceCollection用来构造容器对象IServiceProvider,调用ServiceCollection的BuliderServiceProvider()创建ServiceProvider,可以用来获取BuliderServiceProvider()之前ServiceCollection中的对象。服务(Service):和框架请求之后返回的一个对象,可以是一个数据库链接,也可以是一个文件处理的方法,或者是数据处理的一个过程方法。服务容器:负责管理注册的服务。
2023-04-11 18:14:45 2088 1
原创 .Net6.0系列-7 .Net 6LinQ(三)常用扩展方法
四 LinQ使用建议:当需要计算大量数据,并需要瞬间完成的时候不建议使用LinQ,如图形处理图片中的每一个像素点的时候,需要瞬间完成,并将图片瞬间显示出来可以使用三元运算符/或者Math/或者自己使用基础算法写。where()的返回集合是Enumerable,返回的是T的全部字段,而Select是可以返回集合的任意需要的字段。一.投影:把集合中的每一项转换为另一种类型使用的是Select()方法。find()是在lamada表达式中的使用,以上两个是LinQ的使用。三 链式编程:多条件一起查询。
2023-03-25 16:27:50 358
原创 .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 617
原创 .Net6.0系列-5.Net 6LinQ(一)揭秘及优势
2.Net中定义了泛型委托Action(无返回值)和Func(有返回值),所以一般不用自定义委托类型。二:匿名委托的使用,这里主要是一步一步的从委托类型的写法,转换为Lamada表达式的写法。一.LinQ让数据处理变的简单,但是执行效率不一定最高, 本质就是委托。1.委托是可以指向方法的类型。3.c#中的var是强类型的。
2023-03-18 14:14:02 271
原创 .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 564
原创 .Net6.0系列-3.Net 6及以上异步编程(二)
一.异步方法不等于多线程,异步方法的代码并不会自动在新线程中执行除非手动将代码放到新线程中二.为什么有的异步没有用async修饰async方法的缺点:1.异步方法会生成一个类,运行效率没有普通方法高 2.可能会占用非常多的线程标明async只是为了更方便的使用await,第二种没有使用async,如果需要将Task的结果拿出来进行操作的时候需要使用async和await三 .为什么尽量少使用Thread.Sleep();
2023-03-06 21:30:45 505
原创 .Net6.0系列-2.Net 6及以上异步编程(一)
进行切分为多个状态(swich(){case}),对async方法的调用会被拆分为对MoveNext的调用,await看似等待,经过编译。可用ILSpy反编译器反编译,该代码,可知async的方法会被C#编译器编译成一个类,根据await调用。await调用的等待期间,.Net会把当前的线程返回会给线程池,等异步方法调用执行完毕之后,1.异步方法的返回值一般是Task,T是返回类型,Task,异步方法以Async结尾.框架会从线程池再取出一个线程来执行后续的代码,如果下面的代码sb很短,则不会切换线程,
2023-02-25 16:27:11 1254
原创 .Net6.0系列-1.Net 6及以上知识点整理-基础知识
文件发布选项:生成单个文件(只生成一个文件,所有文件封装到一个文件里面 *.exe)/启用readyToRun(启动更快,文件更大)选择独立运行时–>目标运行时:分为可移植的(目标电脑安装框架)与具体目标框架(win/linux/osx(苹果系统))项目上右键点击–>发布–>(设置完成路径设置)…–>点击"完成"–>进入发布界面–>点击"编辑"进入发布配置部署模式可选择:依赖框架(运行电脑需要安装)和独立发布(直接复制到目标电脑即可运行)
2023-02-20 15:02:11 1104
原创 wpf中调用按钮点击动作
wpf中没有performclick的方法,可以这样写:1.bt1.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));问题:这样调用按钮事件有可能引发错误:调用线程无法访问此对象,因为另一个线程拥有该对象。2.解决方法这个问题出现的原因主要是线程间的访问限制导致的,如果想要访问可以通过委托来进行访问this.bt1.Dispatcher.Invoke(new Action(delegate{bt1.RaiseEvent(new Route
2022-03-02 09:53:06 1655
转载 C# 基础 Dictionary(字典)和ConcurrentDictionary(线程安全的字典)
https://blog.csdn.net/weixin_41561640/article/details/106868304
2022-02-19 09:58:34 2893
原创 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 1256
原创 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 2255
原创 wpf--获取单元格的内容
最好的方法是使用Items属性并直接访问您的数据项:var dataItem = dataGrid.Items[0] as …;当然也可以直接通过数据源进行获取,应为datagrid绑定数据之后是同步的,但是如果一个数据源还没有数据,需要从前台输入的时候,这是后光标还在单元格里面,就需要使用下面这种方法了,可以获取行列,然后根据行列来获取,用于插入批次等情况,方便操作但是您可以使用此类来获取单元格并使用GetValue()方法访问该值(更像您的示例).代码取自此处:datagrid get c..
2021-12-18 14:29:34 1598
原创 sqliteHelper.cs文件中的static方法无法进入,报类型初始值设定项引发异常
情况一: 报此错误,是因为加载System.Data.Sqlite.dll文件的出错,该文件是分32和64位,请确认该System.Data.Sqlite.dll和你的操作系统匹配情况二:wpf项目开发时,生成路径一定不要改,改的话也会报这个错,使用默认的Debug路径即可,如果报错了,把路径改回来,然后保存,关闭项目,然后重新打开sln文件...
2021-08-24 14:47:35 337
原创 WPF系列(2)----绘制路径/绘制矩形
<!--WindowStartupLocation:设定项目启动位置--><Window x:Class="HappyWpf.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/
2021-08-14 15:45:42 922
原创 WPF系列(1)----简单窗体
<!--声明性语言 x:Class="TEG.MainWindow"与MainWindow.cs文件中的构造函数对应--><Window x:Class="TEG.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http:/...
2021-08-14 15:33:34 177
转载 C#加密解密
C#加密解密大全1、方法一 (不可逆加密)复制代码复制代码public string EncryptPassword(string PasswordString,string PasswordFormat ) { string encryptPassword = null; if (PasswordFormat="SHA1") { encryptPassword=FormsAuthortication.HashPasswordForStoringInConfig
2021-08-14 13:23:08 3246
原创 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 1069
原创 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 929
原创 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 1620
原创 线程池强制终止的解决方案
在控制软件的开发过程中,有可能会出现强力终止程序的情况,但是你又使用了线程池,无法跳出程序,因为如果出现异常之后,多运行一行代码就可能会造成设备的损坏,但是不使用线程池的话又会造成系统性能降低。可是线程池本身不提供强制退出,只能通过IsCancellationRequrest退出线程,虽然强制退出可能造成其他问题,但是在控制软件中非常实用。这里提供一种使用线程和线程池结合的方法,通过强制退出线程来终止线程池的执行。 说白了就是把线程池嵌入到线程中使用,如果需要暴力终止,就直接调用线程的...
2021-04-20 11:16:02 1510
原创 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 7970 22
原创 序列化与反序列化高级应用
在进行系统开发的时候序列化与反序列化在保存系统参数时可以有很大优势,比如不需要修改数据库增加字段直接修改实体就可以了,这一点对于上位机开发非常有帮助,因为上位机的电脑一般不联网,所以在上位机进行参数保存的时候建议使用序列化,但是运行参数不建议使用序列化,所谓的其实就是按照xml的方式将数据以流的方式存入数据库里面,当需要数据的时候反序列化成实体类。1.创建可以保存流文件的表#region 创建数据库Dictionary<string,string> sqlDic=new Dictio
2021-04-19 11:37:00 179
原创 C#(ThreadPool)线程池的详解及使用范例
此文章是根据乌班图ysm的博客修改的,并加入了自己的一些见解 线程和线程池都是进行多线程操作的,线程池是用来保存线程的一个容器,在程序创建线程来执行任务的时候线程池才会初始化一个线程,线程在执行完毕之后并不会被销毁,而是被挂起等待下一个任务的到来被激活执行任务,当线程池里的线程不够用的时候会新实例化一个线程,来执行,线程池里的线程会被反复利用。 这和我们打客服电话是一个相似的场景,每个打电话的人是一个任务,每个话务员就像一个线程,话务员处理完一个任务之后并不会被辞退,而是等待...
2021-03-09 10:15:35 11692
原创 串口通信基本知识及实例开发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 1770 6
原创 串口通信基本知识及实例开发1(Com口通信简介)
1.串口通信:指外设和计算机之间,通过数据信号线,地线等,按位进行传输数据的一种通讯方式串口通讯是一种接口标准,它规定了电器标准,没有规定接口插件电缆以及使用的协议2.串口通讯的数据格式一个字符一个字符的传输,每一个字符一位一位的传输,并且传输一个字符时,总是以“起始位”开始,以“终止位结束”,字符之间没有固定的时间间隔要求。 每一个字符前面都有一个起始位(低电平),字符本身由7位数据位组成,接着字符后面是一位校验位(可以分为奇校验/偶校验/无校验位),最后是一位/一位半/二...
2021-02-01 11:08:37 8574
原创 文件读写操作(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 891
原创 C# 图片处理详解
本文主要介绍:获取图片的灰度/修改彩色图片为黑白图片/修改图片的对比度Bitmap类:Bitmap对象封装了一个GDI+的位图,此位图由图形图像的像素,以及其属性组成。用于处理由像素数据定义的图像的对象,包括如下属性和方法1.GetPixel方法和SetPixel方法:用于获取和设置图像的指定像素的颜色2.PixelFormat属性:返回图像的像素格式3.Palette属性:获取和设置图像所使用的颜色调色板4.Height/Width属性:返回图像的高度和宽度5.LockBits方法
2021-01-13 15:41:21 3811
原创 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 2865
转载 Web App开发常用设置
一、META/LINK相关: 1、百度禁止转码 通过百度手机打开网页时,百度可能会对你的网页进行转码,往你页面贴上它的广告,非常之恶心。不过我们可以通过这个meta标签来禁止它: <meta http-equiv="Cache-Control" content="no-siteapp" /> 相关链接:SiteApp 转码声明 2、添加到主屏后的标题(IOS) <meta name="apple-mobile-web-app-title" conte..
2020-12-31 16:08:58 213
原创 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 7425
C#开发1200例(包括1,2卷)+ASP.Net MVC开发1200例
2018-12-26
PCan/ECan接收数据卡死
2023-07-09
wpf提示类型初始值设定引发异常
2021-07-31
H5 canvas多次重复画图后 ,位置不是第一次开始的位置
2017-11-02
新手请教 form跳转问题,不报错,无反应
2016-05-16
TA创建的收藏夹 TA关注的收藏夹
TA关注的人