C#
文章平均质量分 58
HappyGirl快乐女孩
爱生活、爱技术、爱家人、爱健康
展开
-
代码分析在设计器代码中发现CA2213错误(Code Analysis finds CA2213 error in designer code)
应该处理CA2213一次性字段'LogEntryForm'包含IDisposable类型的字段'LogEntryForm._changeValuesNavigator':'DynamicBindingNavigator'。更改“LogEntryForm”上的Dispose方法以在此字段上调用Dispose或Close。当我在c#winforms应用程序上运行Code Analysis时,我收到以下警告;将design.cs的这部分代码删除。原创 2023-08-03 09:48:01 · 367 阅读 · 1 评论 -
.net 正确实现IDisposable
CA1063正确实现IDisposable在"User"上提供Dispose(bool)的可重写实现或将类型标记为密封。调用Dispose(false)应仅清除本机资源。调用Dispose(true)应同时清除托管资源和本机资源。在VS2012中,我的代码分析要求正确实现IDisposable,但我不确定我在这里做错了什么。原创 2023-08-02 16:43:51 · 349 阅读 · 1 评论 -
将 P/Invokes 移动到 NativeMethods 类 因为它是 P/Invoke 方法消息
如果您正在创建一个可重用的库,您应该将它们放在。方法添加到下面的类之一(通常是。要消除警告,只需将您的。原创 2023-08-02 16:31:54 · 355 阅读 · 0 评论 -
C#代码统计耗时
Console.WriteLine("Stopwatch总共花费{0}ms.", ts2.TotalMilliseconds);//用Stopwatch类(System.Diagnostics)计算耗时。原创 2023-07-27 16:18:21 · 286 阅读 · 1 评论 -
如何让C#的exe以【管理员方式】启动
UAC(用户账户控制) 的安全机制,如果 UAC 被打开,用户即使以管理员权限登录,其应用程序默认情况下也无法对系统目录、系统注册表等可能影响系统正常运行的设置进行写操作。由于是通过System.Diagnostics.Process.Start() 方式外部调用启动,所以直接通过VS运行时,是不会提示VS也需要管理员权限,只有程序本身需要管理员权限,与生成应用程序的程序不同。然后打开 项目属性 ,将 应用程序 标签页中的 资源 中的 清单 修改为新建的 app.manifest。原创 2023-07-11 11:52:38 · 606 阅读 · 0 评论 -
禁用Windows高DPI:解决软件模糊问题
Windows的高DPI支持是通过DWM(Desktop Window Manager)缩放实现的,但是有时候我们不希望这种效果(例如缩放会使一些内容变得模糊),因此需要禁用Windows高DPI对程序的缩放。有两种方式可以实现这种效果:一个是使用应用程序清单文件,一个是使用系统API实现。下面的代码对Win7及以上的系统禁用高DPI。原创 2023-06-30 14:00:15 · 659 阅读 · 0 评论 -
C# 对System.AccessViolationException处理
上面的代码里,Program.cs使用P/Invoke技术调用了Ref.dll文件里的TestMethod,但是TestMethod尝试给一个空指针赋值,导致一个AccessViolation异常。如果你在2.0下面编译program.cs,并执行的话,这个AccessViolation异常会被catch(Exception e)捕捉到,而如果你在4.0下面编译并执行的话,你会发现catch (Exception e)是不能捕捉到这个异常的。原创 2023-06-13 19:30:34 · 2539 阅读 · 1 评论 -
总结:C# 尝试读取或写入受保护的内存,这通常指示其他内存已损坏。System.AccessViolationException
在C#托管内存中,内存回收一般是有GC自动完成的,如果遇到找不到找不到对象的情况,报错信息是“未将对象引用设置到对象的实例”,而非托管内存的找不到对象报错信息是:尝试读取或写入受保护的内存。因为一个非托管对象的操作方式是指针,当内存中的对象被清理掉时,这段内存地址就拒绝指针随意访问,这事指针如果继续访问这段内存,就会报尝试读取或写入受保护的内存这个错误。在C#调用DLL动态链接库方法的时候,传值的时候自然也要做一些改变,引用类型的值要加入“ref”关键字,值类型(如com)则直接传入数字或变量名即可。原创 2023-06-13 18:00:55 · 9612 阅读 · 1 评论 -
C#程序如何配置应用程序以在具有高 DPI 设置(例如 150%)的机器上正确运行
当我在具有高 DPI 设置(例如 150%)的机器上运行应用程序时,应用程序会按比例放大。到目前为止,一切都很好!但是,所有文本都只是按比例放大,而不是使用更大的字体大小来渲染字体。这当然会导致非常模糊的文本(在所有控件上,如按钮等)。选中 启用 ClickOnce 安全设置,再取消选中。在您的 app.config 文件中,添加以下部分。这时候项目的文件里就多了app.manifest。第二种方式:(第一种不行采用)在方法一的基础上。如果这个还不行 ,就没招了,祝君好运!第一种:(VS2015以上版本)原创 2023-05-15 17:57:32 · 1136 阅读 · 0 评论 -
C#常用公共类源码可直接使用
FTP操作类,H5-微信,Html操作类,INI文件读写类,IP辅助类,Javascript,Json,JSON操作,JS操作,Lib,Mime,Net,NPOI,obj,packages,Path,PDF,Properties,QueryString地址栏参数。,RDLC直接打印帮助类,ResourceManager,RMB,SqlHelper,SQL语句拦截器,URL的操作类,VerifyCode,XML操作类,上传下载,二维码操作类,共用工具类,其他,分词辅助类,分页。,图片,图片操作类,原创 2023-04-20 01:07:01 · 470 阅读 · 0 评论 -
C#启动程序传递参数丢失双引号,如何解决?
varnewstr=data;newstr=newstr.Replace("\"","\\\"");Process.Start(childPath,this.Handle.ToString()+"_asasasas_"+newstr);原创 2022-07-23 14:37:12 · 387 阅读 · 0 评论 -
C#Split的用法,Split分割字符串
string[]strarry=str.Split(newstring[]{"张三"},StringSplitOptions.None);stringstr="来自张三的亲切问候!分割结果["aaBB","defgh"]分割结果["来自","的亲切问候!输出下面的结果ababab。原创 2022-07-23 13:44:42 · 837 阅读 · 0 评论 -
C#小技巧 获取枚举所有枚举值
enumTestEnume{Enum1,Enum2}staticvoidTest(){Debug.Log("GetValues");foreach(TestEnumeeinEnum.GetValues(typeof(TestEnume))){Debug.Log(e);}Debug.Log("GetNames");foreach(varsinEnum.GetNames(typeof(TestEnume))){Debug.Log(s);}原创 2022-07-15 11:49:30 · 4240 阅读 · 0 评论 -
C# 窗口最小化到托盘及右键图标显示菜单
日常开发有时候需要实现窗口最小化到系统托盘,本文就来讲讲该如何实现winfrom最小化到系统托盘,本例子基于VS2019编写。用C#开发winform桌面程序时,程序启动后,默认是显示在桌面而且在任务栏中有对应的图标。有的时候,需要在程序最小行后,将程序图标仅仅显示在系统托盘,不在任务栏中显示。Form最小化是指整个Form都缩小到任务栏上,但是窗体以Form的标题栏形式显示在任务栏上, 若是想让Form以Icon的形式显示在任务栏右下角,则需要给Form添加一个NotifyIcon控件。打开VS2019,原创 2022-07-11 17:49:11 · 3518 阅读 · 0 评论 -
变量的初始化:直接还是在构造函数中?
大多数时候,我看到了像这样初始化变量的方法从我的角度来看,这是初始化变量的最常用方法。书籍,博客以及.NET的内部实现中的大多数代码都与我的示例相同。最近我看到人们直接进行初始化,所以没有在构造函数中设置值。从观点来看,初始化和声明变量或初始化构造函数中的变量没有区别。除了最佳实践和代码行的长度之外,直接初始化变量的好处在哪里并且存在细微差别?我们可以说我们在发布和版本下编译以下代码。优化构建IL Test Class for Class Test1Class Test2的IL指令原创 2022-07-07 17:05:24 · 210 阅读 · 0 评论 -
C# 读写Ini文件
ini文件在Win95以前比较盛行,之后由于出册表等技术的出现,ini技术主键退居二线,不过对于一些小项目,读写ini文件还是很适用的。 Windows API提供了读写配置文件的操作,在C#程序中只要导入相应的API即可。例如GetPrivateProfileString()方法,在MSDN查得原型如下: 由于C#和C++数据类型不同,在导入win32 API时需要做相应的转换,并且要导入相关的类。如下所示: 同理导入另一个函数 在main函数测试如下:...原创 2022-07-06 10:03:21 · 445 阅读 · 0 评论 -
虚方法与抽象方法区别
虚方法是必须要实现的,只有接口或者抽象方法才没有实现体,什么是实现体,就是方法的那对大括号:下面举例:虚方法是必须实现的,子类可以选择是否重写抽象方法一定没有实现,而且必须在抽象类中,子类中必须重写。应用举例:......原创 2022-07-06 10:01:13 · 147 阅读 · 0 评论 -
详解C#的序列化与反序列化
序列化是通过将对象转换为字节流,从而存储对象或将对象传输到内存,数据库或文件的过程。主要用途是保存对象的状态,包括对象的数据,以便能够在需要是重建对象。反向过程称为 反序列化。 如上图所示,对象 object 被序列化为 流,其中不仅包含数据、还包含对象类型的相关信息,如版本、区域性和程序集名称。然后可以将此流中的内容存储到数据库、文件或内存中。通过序列化,可以执行如下操作:通过 Web 服务将对象发送到远程应用程序、在域之间传递对象、以 XML 字符串的形式传递对象通过防火墙、跨应用程序维护安全性或用户专原创 2022-07-06 09:59:39 · 1290 阅读 · 0 评论 -
C# 关于sendtoback()和bringtofront() 的特点说明
在开发的时候经常会遇到使用这两种方法,调整控件的顺序,尤其是在自动生成控件的时候。有的时候会感觉不好用,这里提供一个解决方案。这两个方法必须要在添加控件之后才会好用,范例代码如下:label lbl=new label();//属性设定。。。。。control.add(lbl);lbl.bringtofront();控件置顶:控件名.BringToFront();控件置底:控件名.SendToBack();主线程1.设置TopLevel,Topmost,bringfront属性。子线程2.在可在Load事原创 2022-07-06 09:41:59 · 1714 阅读 · 0 评论 -
C# action,delegate,func的用法和区别
以前我都是通过定义一个delegate来写委托的,但是最近看一些外国人写的源码都是用action和func方式来写,当时感觉对这很陌生所以看起源码也觉得陌生,所以我就花费时间来学习下这两种方式,然后发现确实代码简洁了不少。这两种方式我们也可以去实践的过程去慢慢运用。先说一下委托:模拟一下场景:小明最近学习情绪高涨,以前买的书已经满足不了欲望,打算去买本(一个程序员的自我修养)。可是呢以前总是跑书厂买,nm,太远了扛不住,就去跑去附近书店去买,小明去给钱就弄了一本书回来,这个过程就是委托。开始分析1:小明要买原创 2022-07-05 19:40:17 · 176 阅读 · 0 评论 -
C# 窗体应用改成类库输出
类库你就新建类库文件直接生成dll去引用好了,新建一个windows窗体把他搞成dll去引用,先新建第一个窗体应用,代码如下;点击按钮运行后结果如下: 然后我把它的输出类型改为类库: 然后去新建第二个窗体应用,然后引用上面的项目代码如下:执行后:...原创 2022-07-05 19:34:52 · 969 阅读 · 0 评论 -
c# 常用框架收藏
Json.NETMath.NETFaker.NetHtml Agility PackNCrawlerSuperWebSocketSuperSocketQuartz.NETLucene.NetHttpLibSmart Thread PoolDocXPDFsharpDapperNHibernatelog4netSharpSerializerXProxynopCommerceEnterprise LibraryAutofac...原创 2022-07-05 19:29:52 · 1087 阅读 · 0 评论 -
C#中获得文件夹下所有文件
C#中获得文件夹下所有文件的两种方法如果想要获得一个文件夹下所有的文件,对于大家来说应该很简单,此处也做了一下总结,归为两种方法,方法一: 利用递归的方法获得所有文件////// 存储文件的变量///List FileList = new List();////// 获得文件夹下所有的文件(递归)////// 文件夹的目录/// 返回所有文件方法二:利用类库,直接获得所有文件复制代码//////...原创 2022-07-05 17:47:27 · 12769 阅读 · 0 评论 -
RAR压缩解压命令
先介绍一下rar的命令格式及相关参数含义(摘自rar): rar - - a 添加文件到压缩文件 c 添加压缩文件注释 cf 添加文件注释 ch 改变压缩文件参数 cw 写入压缩文件注释到文件 d ......原创 2022-07-05 13:48:24 · 11150 阅读 · 0 评论 -
软件启动后出现“根级别上的数据无效 行1 位置1“错误
使用XDocument.Parse解析XML时报异常: 根级别上的数据无效。 第 1 行 位置 1。解决方式目前有两种:1把loadXML函数改成load()函数就可以解决了。两个的用法有区别: LoadXml (): 该方法从字符串中读取 XML。 如 LoadXml("C#"); Load (): 方法将文档置入内存中并包含可用于从每个不同的格式中获取数据的重载方法。如 Load(文件) 2google、百度后基本确定...原创 2022-07-04 17:29:30 · 5562 阅读 · 0 评论 -
不同的方式检查Null
检查参数值是否为空的经典方法是什么?如果您已经使用C语言开发了一段时间,您可能会熟悉以下经典语法:自C# 7开始,您可以使用is关键字进行null检查,如下面的代码段所示: 但是对于C# 7,甚至还有一个更短的语法。还引入了丢弃。它们是未使用且被忽略的变量,在代码中用下划线(_)。结合空合并运算符(??),可以这样编写空检查:也就是说,整个方法看起来就像这样:老实说,我真的很喜欢使用丢弃的最后一种方法,但是对于一些开发人员来说,这可能太多了。我认为is关键字非常清晰易读。它是我的最爱原创 2022-07-01 20:17:42 · 468 阅读 · 0 评论 -
C# 访问 null 字段会抛异常原因探究
由于 是一个 null 对象,很显然这段代码会抛异常,那为什么会抛异常呢?要想找原因,需要从最底层的汇编研究起。可以使用 的反汇编窗口,观察 处到底生成了什么。这三句汇编还是很好理解的, 存放的是 对象, 是取 person.age,最后一句就是将 age 放在 栈位置上,接下来我们来看下 null 时的 ecx 到底是多少,截图如下:从图中可以看到,此时的 ,如果大家了解 windows 的虚拟内存布局,应该知道在虚拟内存的 范围内是属于 null 禁入区,凡是落在这个...原创 2022-06-30 10:04:46 · 265 阅读 · 0 评论 -
C# 反射(Reflection)
这节讲一下.NET 中的一个技术:反射(Reflection)。 反射是一种很重要的技术,它可以在程序运行时,动态的获取类的实例,并调用实例中的任何方法。它就像一面镜子,映射出一个类的所有细节。 typeof 说反射之前,要先知道typeof这个关键字,它是反射的核心,typeof可以动态的获取某个类的类型信息,反射通过这些类型信息,就可以生成实例等一些操作。 Reflection 反射的命名空间位于System.Reflection,下面开始演示反射的代码(动态原创 2022-06-28 20:16:36 · 442 阅读 · 0 评论 -
C# 专业的软件安装包
C/S客户端开发完成,需要将程序交付给用户,直接压缩发给用户是可以的(只是有点不专业),如果能有一个比较好看的安装界面,那档次就不一样了。本文介绍怎么使用Adanced Installer 17.9 制作专业的Windows 客户端安装包,其他软件或者本软件其他版本制作步骤也是类似的下面介绍安装包制作步骤:首先下载软件安装包制作软件,安装包从360软件管家下载,其他途径亦可: 下载后,按默认步骤安装即可。制作软件安装包与软件开发一样,我们先创建一个安装包制作工程,相当于保存安装包配置的过程,方便以后再次修原创 2022-06-28 20:12:16 · 1657 阅读 · 0 评论 -
深入了解C#泛型
现代程序员写代码没有人敢说自己没用过泛型,这个泛型模板T可以被任何你想要的类型替代,确实很魔法很神奇,很多人也习以为常了,但就是这么有趣的泛型T底层到底是怎么帮你实现的,不知道有多少人清楚底层玩法。现在的netcore 3.1和最新的.netframework8早已经没有当初那个被人诟病的ArrayList了,但很巧这玩意不得不说,因为它决定了C#团队痛改前非,抛弃过往重新上路,上一段ArrayList案例代码。上面这段代码,为了保证在Add中可以塞入各种类型 eg: int,double,class原创 2022-06-28 19:09:02 · 717 阅读 · 0 评论 -
如何将图标打包进DLL并可以提取复用
个人的项目界面有时候需要用到很多图标,这些图片可以建立一个文件夹单独存放,但有时涉及到多台设备部署的话,每台设备都需要随项目一起拷贝过去,如果忘记了界面显示就会出问题,有没有更好的办法解决? 有,当然有,这节就针对这个问题介绍一种办法,将图片嵌入资源随DLL一起打包. 方法介绍 step1:点击项目-》右键-》属性-》资源-》添加资源 step2:前台绑定原创 2022-06-20 15:42:08 · 1297 阅读 · 0 评论 -
进程之间通讯(两个应用程序如何能够通讯)附C#项目工程源码
在某些情况下,我们需要一个进程(可视为应用程序)调用另外一个进程,两个进程之间能够传递一些参数信息;提高信号通信的效率,传递大量数据,减轻程序编制的复杂度。提供三种方式:1.共享内存模式2.消息传递模式3.共享文件模式最为快捷有效的方式之一,UNIX系统中常被使用。内存共享区的互斥要通过其它机制实现;数据的发送方不关心数据由谁接收,数据的接收方也不关心数据是由谁发送的,存在安全隐患。message-passing:通过操作系统的相应系统调用进行消息传递通讯。分为直接和间接两种:直接通信方式:点到点的发送Se原创 2022-06-18 20:36:42 · 1152 阅读 · 0 评论 -
Concat源码解析C#
在Dotnet开发过程中,Concat作为IEnumerable的扩展方法,十分常用。本文对Concat方法的关键源码进行简要分析假如我们有这样的两个集合,我们需要把两个集合进行连接!List lst = new List { "张三", "李四" };List lst2 = new List { "王麻子" };不使用Linq 使用Linq public static IEnumerable Conc...原创 2022-06-16 19:23:13 · 1141 阅读 · 0 评论 -
C#如何调试多线程程序
调试多线程程序一般有以下几种办法1、在日志的某个地方写日志文件。优点:不会干扰程序的执行,特别是对网络的多线程通信。缺点:每次都需要打开日志文件以查看进程运行的信息。2、利用断点进行调试。优点:直观,可以直接看到运行过程的值缺点:在多个线程设置断点,可能让程序跳来跳去,还需要额外地分出一部分精力用来理清程序的逻辑3、利用弹出窗口来查看进程调试的信息。优点;直观缺点;在调试网路通信的时候,使得通信的过程产生延时,导致通信失败。4、利用vs自带的线程窗口来调试优点:直观,可以直接从进程图上看到哪个进程是活动进程原创 2022-06-14 20:06:00 · 1716 阅读 · 0 评论 -
C# lock,Monitor,Mutex的区别
C# lock,Monitor,Mutex的区别1-lock和Monitor的区别一、lock的底层本身是Monitor来实现的,所以Monitor可以实现lock的所有功能。二、Monitor有TryEnter的功能,可以防止出现死锁的问题,lock没有。2-Mutex和其他两者的区别测试三个都是在限制线程之外的互斥,线程之内,都不限制,同一个线程如果被lock两次。是不会出现死锁的。所以Mutex本身可以实现lock和Monitor所有的操作。至少从功能上讲是这样的。但是Mutex是内核级别的,消耗较原创 2022-06-14 19:02:01 · 762 阅读 · 0 评论 -
Linq语法Average关键字使用说明
Linq语法Average关键字使用说明开发过程中,Average作为IEnumerable的扩展方法,十分常用。本文对Average方法的关键源码进行简要分析,以方便大家日后更好的使用该方法。Average 计算数值序列的平均值假如我们有这样的一个集合List grades = new List { 78, 92, 100, 37, 81 };在不使用linq的情况下我们要计算该集合的平均值,且不能使用linq,那么我们的计算平均值方法和下面这段代码应该没有多大的出入 double A...原创 2022-06-14 09:06:37 · 211 阅读 · 0 评论 -
C#的新特性(C#核心技术浅解)
核心技术无论对于公司而言,还是对于个人而言,都是非常有价值的关键特性。一个掌握了核心技术的开发者,必然是脱离了低级趣味的专业开发者,在纷繁复杂的互联网时代面前,往往有更多机会凸显自己的才华,进而获得与自己实力相匹配的待遇水平。 目录目录1️⃣ C#的发展历程2️⃣ C#的新特性3️⃣ C#的新特性-C#可为空类型可为空值类型 C#可为空引用类型可为空上下文4️⃣ C#的新特性-属性模式5️⃣ C#的新特性-Json处理6️⃣ C#的新特性-span和MemoryC#是由伟大的程序员之神Anders Hej原创 2022-06-11 14:06:27 · 2369 阅读 · 0 评论 -
C# 在await中使用Lock出现cannot await in the body of a lock statement解决方法
如果试图在 lock 块中使用 async 关键字时使用 lock 关键字,会得到这个编译错误:cannot await in the body of a lock statement。原因是在async 完成之后,该方法可能会在一个不同的线程中运行,而不是在async 关键字之前。lock 关键字需要同一个线程中获取锁和释放锁。下面的代码块会导致编译错误: 如何解决这个问题?不能为此使用 Monitor,因为 Monitor 需要从它获取锁的同一线程中释放锁。lock 关键字基于 Monitor。原创 2022-06-10 13:40:01 · 1373 阅读 · 0 评论 -
C#通过反射获取对象的几种方式比较
🎒 🎒 🎒 文章目录 🎒 🎒 🎒目录🏳️🌈 使用标准反射的 Invoke 方法🍁 使用 Activator.CreateInstance📣 使用 Microsoft.Extensions.DependencyInjection💞 Natasha🎉 使用表达式 Expression🔥使用 Emit🏅 对比测试🕺 测试结果💊 总结在本文中,对比了常见的几种反射的方法,介绍了它们分别应该如何使用,每种的简易度和灵活度,然后做了基准测试,一起看看这之间的性能差距。按照使用的...原创 2022-06-10 08:23:47 · 1788 阅读 · 0 评论 -
C# 反射详解及其反射类代码
🌍个人简介 🍁作者简介:大家好,我是HappyGirl快乐女孩,爱好各种技术🏅 ✒️个人主页:HappyGirl快乐女孩 🕺支持我:点赞👍+收藏⭐️+留言📝 💊格言:坚持学习,你一定与众不同!🔥目录目录反射1234注意:补充:原理“反射”其实就是利用程序集的元数据信息。反射可以有很多方法,编写程序时请先导入 System.Reflection 命名空间。假设你要反射一个 DLL 中的类,并且没有引用它(即未知的类型):2若要反射当前项目...原创 2022-06-07 19:16:15 · 1212 阅读 · 0 评论