![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C#
文章平均质量分 51
Pass_Time_
这个作者很懒,什么都没留下…
展开
-
C#中如何捕捉信号的上升沿和下降沿
在上面的例子中,我们分别用2个按钮模拟信号的置位和复位操作,然后在线程中调用GetP和GetN方法分别捕捉上升沿和下降沿。当捕捉到信号变化以后使用窗体上的标题文本进行提示。上升沿和下降沿在我们开发上位机时使用率非常高,常见于消息触发、脉冲归档等。但是在C#中没有类似PLC中的上升沿、下降沿那样的指令,需要我们自己编码来实现。首先我们创建一个用于生成上升沿和下降沿的类,命名为“GetPN”。转载 2022-09-29 21:52:12 · 1771 阅读 · 1 评论 -
c#判断两个对象和对象中的属性是否相同(以及记录对象中的哪些字段,和详细的改变情况)
注意,引用类型进行对比的时候,需要在编辑之前对对象进行拷贝,让拷贝的对象与编辑后的对象进行对比。(因为引用类型不同于值类型,值类型每次操作都会产生一个新的对象,而引用类型在new一个新对象赋值时,其实是在堆上创建了一个内存地址,指向的仍然是原对象,对它操作原对象也会发生变化。原文出处:https://www.cnblogs.com/likui-bookHouse/p/9908045.html。一、当前项目需要记录变更记录,即用户在进行编辑后,将变更操作记录下来。代码1:(仅仅返回是否变化的标识)转载 2022-09-27 18:51:14 · 985 阅读 · 0 评论 -
C# WinForm程序防止多开的方法总结
一、Winform启动的时候,检测是否存在同样的进程名,防止程序多开;二、利用Mutex互斥对象防止程序多开;原创 2022-08-28 11:41:43 · 2204 阅读 · 2 评论 -
将DataTable转换为List<T>以及<T>类
ConvertHelper类请参考 https://www.cnblogs.com/axiaoshuye/articles/15697734.html。最开始是使用循环一个个给类的属性赋值,但是这样效率低并且无法复用。将DataTable转化为List,使用DataTable.ToList();将DataTable转化为,使用DataTable.ToData();转换的前提条件是DataTable字段名要与对应类的属性名一致。填充已有内容,使用DataTable.FillData();...原创 2022-08-28 11:11:40 · 2969 阅读 · 1 评论 -
深拷贝、浅拷贝、引用拷贝的区别
目录作者:小牛呼噜噜 |计算机内功、JAVA底层、面试相关资料等更多精彩文章在公众号「小牛呼噜噜 」转载 2022-08-23 13:07:32 · 128 阅读 · 0 评论 -
C# List排序简介及四种方法介绍-附代码
有时用户需要按某项排序,但是查询结果以List格式存储,我们当然可以自己编写一个快速排序的方法进行排序,但是还有多个选择,并且可能比你写的短、效率也不差,那不如在恰当的时候选择其他方法对List进行排序。c#的一大特色就是Linq,他遍布c#里里外外,利用他可以减少大量的代码,不过他是从SQL中出来的,所以SQL还是了解之后,这个就好懂了。方法一: List的OrderBy与OrderByDescending方法。方法二:使用Sort方法,方法四:使用Linq。原创 2022-08-23 12:42:28 · 18442 阅读 · 0 评论 -
.NET性能优化-使用ValueStringBuilder拼接字符串
这一次要和大家分享的一个Tips是在字符串拼接场景使用的,我们经常会遇到有很多短小的字符串需要拼接的场景,在这种场景下及其的不推荐使用也就是使用+=运算符。目前来说官方最推荐的方案就是使用来构建这些字符串,那么有什么更快内存占用更低的方式吗?那就是今天要和大家介绍的。今天和大家分享了一下高性能几乎无内存占用的字符串拼接结构体,在大多数的场景还是推荐大家使用。但是要非常注意上面提到的的几个场景,如果不符合条件,那么大家还是可以使用高效的来进行字符串拼接。转载 2022-08-20 19:38:38 · 305 阅读 · 0 评论 -
.NET性能优化-快速遍历List集合
是.NET中的泛型集合类,可以存储任何类型的数据,因为它的便利和丰富的API,在我们平时会广泛的使用到它,可以说是使用最多的集合类。在代码编写中,我们经常需要遍历一个List集合,获取里面的得元素进行一些业务的处理。通常情况下,集合内的元素不是很多,遍历起来非常快。但是对于一些大数据处理,统计,实时计算等动辄数万、十万数据的List集合,如何快速的遍历它呢?这就是今天需要和大家分享的内容。今天和大家聊了聊如何快速的遍历List集合,在大多数的情况下推荐大家使用foreach。转载 2022-08-20 17:26:55 · 293 阅读 · 0 评论 -
C# FileSystemWatcher 实时监控文件的增加、修改、重命名和删除实例
好多时候,我们都需要知道某些目录下的文件什么时候被修改、删除过等,如果能用miniFilter驱动过滤来做的话当然是最好不过了,这是内核级别的,当然也比较复杂。这里需要注意一个问题:因为FileSystemWatcher类本身就是一个多线程的控件,在实例化一个FileSystemWatcher时就自动创建了一个线程,在事件处理的方法中需要使用委托的方式封送到主线程中处理。//声明传递文件Created、Changed、Deleted对象和委托,用于文件增加、删除、修改时更新UI界面。...原创 2022-08-17 20:53:37 · 2241 阅读 · 0 评论 -
C# 内存泄露与资源释放-代码中改善注意的几个问题点
实际上由于各个开发人员的水平跟接触面不同,又没有经过统一的培训(各个人对内存释放的理解与关注度不同,或者写代码时就没考虑内存未被释放这种问题),发现问题的时候项目往往已经做到了一个阶段(SIT测试),系统也比较庞大了,这种时候才发现内存泄露的问题确实是很头疼的。如果你觉得写这样的一段代码很Cool,很简洁,你在项目也有这么写代码,那你就碰到大麻烦了,你试试在Form2中开个大一点的数组来检查内存,然后运行,按几下button1按钮,你就会发现,内存一直增加,即使你调用GC也无济于事。...原创 2022-08-15 20:05:06 · 639 阅读 · 3 评论 -
DALSA网口线扫相机SDK开发详解例程(C#版)
Win 10系统很扯淡,报错的提示一点都看不懂,我换Win 7的系统后,也报错,但是明确把错误原因找出来了。当你完全理解了这篇文章(以及我提到的两篇),Dalsa网口线阵相机的开发基本就没啥问题了,当然这时候你返回去看官方demos会有新的收获,比如我上面的UpdateFrameRate()就是从官方demos中剥离出来的,该函数可以得到采图时的实际帧率。文章二的代码缺少关键的GetCameraInfo()方法,是不能直接运行的,但是这篇文章的讲解更全面、深入,可以说两篇都是必备的啦。...原创 2022-08-12 22:46:03 · 2069 阅读 · 1 评论 -
.NET(C#) 如何配置用户首选项及保存用户设置
访问修饰符:“访问修饰符”按钮指定 Properties.Settings(对于 C#)或 My.Settings(对于 Visual Basic)帮助程序类的访问级别,这些类分是 Visual Studio 在 Settings.Designer.cs 或 Settings.Designer.vb 中生成的。加载Web设置:“加载 Web 设置”将显示“登录”对话框,让你能够加载经身份验证的用户或匿名用户的设置。但是,你在项目的app.config里是看不到修改值的,这里记录的就是创建时的默认值。...原创 2022-08-12 22:41:27 · 1780 阅读 · 0 评论 -
DALSA工业相机SDK二次开发(图像采集及保存)C#版
2,然后读取配置文件(配置文件是通过官方自带的CamExpert来生成的)读取参数,也可以在程序中配置,本程序有个setting按钮,按一下就可以配置拉,把想配置的参数写在对应的代码块里(当然小编很懒,没做显示的功能,所以按按钮的时候你可能觉得按了个寂寞,但已经配置好了)。还有个读取参数的按钮(当然小编也没做显示的功能,所以也按了个寂寞),但有助于debug的时候查看数据,也可以自己打印出来看看。3,Snap是快照,可以设置快照的张数,因为写本程序时只有相机没有镜头,所以是黑乎乎一片…...原创 2022-08-12 22:30:58 · 3499 阅读 · 6 评论 -
使用Basler相机SDK采集的显示图片
添加Basler引用,复制安装目录pylon 6\Development\Assemblies\Basler.Pylon\x64路径下的Basler.Pylon.dll文件到你的项目debug目录下,并使用using Basler.Pylon;设置好后,打开pylon Viewer程序,这是basler提供的相机调试工具,测试下相机是否正常,然后就可以开始进入VS开发了。注意:一旦打开相机连接,必须有关闭,否则相机将会连接不上,这种情况下等待几分钟后,连接对象会被系统回收,再次连接即可。...原创 2022-08-12 22:11:57 · 1673 阅读 · 0 评论 -
C#深度克隆泛型对象T及List<T>的扩展方法
我们想要a和b都是各自互不影响的,那么只能是完全地新建一个新的对象,并且把现有对象的每个属性的值赋给新的对象的属性。这里我们写两个泛型方法分别对对象T和集合List进行深度克隆的实现,我们的方法实现方式是“扩展方法”,就是能在原有的对象后面直接“点”操作。那么a指向的是b的地址,这样在有些时候就会造成如果修改a的值,那么b的值也会跟随着改变(a和b是同一个引用内存地址)。出处:https://www.cnblogs.com/7tiny/p/7007291.html。这样就完成了对user1的深度克隆!...转载 2022-08-10 10:28:14 · 531 阅读 · 0 评论 -
WinForm——Text控件基本用法总结
目录1、常用属性:Text属性MaxLength 属性MultiLine 属性HideSelection属性ReadOnly属性PasswordChar 属性ScrollBars属性SelectionLength属性SelectionStart属性SelectedText 属性LinesModifiedTextLength属性WordWrapPasswordChar属性ShorcutsEnabled属性2、常用方法:AppendText方法Clear方法Focus方法Copy方法Cut方法Paste方法Un翻译 2022-07-06 17:41:24 · 3092 阅读 · 0 评论 -
DataGridView控件常用属性
一、单元格内容的操作*****// 取得当前单元格内容*******另外,使用 DataGridView.CurrentCellAddress 属性(而不是直接访问单元格)来确定单元格所在的行:DataGridView.CurrentCellAddress.Y 和列: DataGridView.CurrentCellAddress.X 。这对于避免取消共享行的共享非常有用。当前的单元格可以通过设定 DataGridView 对象的 CurrentCell 来改变。可以通过 CurrentCell 来设定转载 2022-06-09 22:58:54 · 1730 阅读 · 0 评论 -
VisionPro获取Blob的外接矩形和最小外接矩形
Blob工具提供这两个接口我们就可以通过脚本来获取它的几何信息了,如四个点的坐标等。原创 2022-05-16 22:03:19 · 2022 阅读 · 0 评论 -
CogBlobTool斑点工具的RunParams及Result属性整理
//********************************************运行参数设置**RunParams************************************* //******************************************** ************************************* //设置->分段->模式 SegmentationParams.M原创 2022-05-16 21:59:04 · 1658 阅读 · 0 评论 -
使用VisionPro的CogImageFileTool工具读取本地图片和保存图片到本地
/// <summary> /// vpro保存图片到本地 /// </summary> /// <param name="cogImage">输入图像</param> /// <param name="fileName">文件名</param> private void SaveImage(ICogImage cogImage, string fileN.原创 2022-04-13 22:32:55 · 4247 阅读 · 0 评论 -
C#在VS中利用VisionPro库读取相机列表及取像
在 .NET 环境下通过VisionPro打开相机并获取图像的基本步骤如下:1.创建CogFrameGrabberGigEs对象,获取连接到图像采集卡的所有相机设备。2.通过CogFrameGrabberGigEs获取单个对象ICogFrameGrabber的引用,支持的图像格式、相机序列号等信息可以从该接口对象中获取。3.通过CogFrameGrabber的CreateAcqFifo方法创建ICogAcqFifo接口对象,在使用CreateAcqFifo方法时须指定图像格式、相机端口等信息。4.通原创 2022-04-08 16:54:39 · 3914 阅读 · 1 评论 -
C# 跨线程更新UI界面的适当的处理方式,友好的退出界面的机制探索
本文主要讲讲C#窗体的程序中一个经常遇到的情况,就是在退出窗体的时候的,发生了退出的异常。联系作者及加群方式(激活码在群里发放):Cooperation - HslCommunication 官网欢迎技术探讨我们先来看看一个典型的场景,定时从PLC或是远程服务器获取数据,然后更新界面的标签,基本上实时更新的。我们可以把模型简化,简化到一个form窗体里面,开线程定时读取 1 2 3 4 5 6 7 8 9 1.转载 2022-04-08 15:33:00 · 1242 阅读 · 1 评论 -
C# 线程的挂起与唤醒 (AutoResetEvent,ManualResetEvent)
如果说C#和C++有什么不同,博主不得不说,对于异步的支持程度是C#的一一个伟大的进步。 其实早期的C++都没有异步,并发的概念。博主第一次使用C++创建异步程序的时候,是使用boost库的内容进行实现的。相对而言,C#对于异步的支持可以说是相当的好。相信很多名词大家都很耳熟能详,比如说Thread,BeginInvoke,Delegate,backgroundworker等等。。。其实楼主在使用了这么多的异步操作过程中,还是觉得backgroudworker比较好用。 当然,我们今天要...转载 2022-04-07 17:36:26 · 2085 阅读 · 0 评论 -
将 .NET Framework 项目转换为 .NET Standard 项目
如今 .NETCore是未来发展的主流(至少在 .NET 5 发布之前),而我们如果要改造一个项目为 .NETCore项目,则它引用的项目应当先改造为 .NET Standard 项目。下表给出了每种平台支持指定的 .NET Standard 版本的最低版本(参考):简单说明一下:.NET Standard 2.0 支持 .NET Core 2.0 和 .NETFramework4.6.1(最好使用 4.7.2 或更高),所以使用这些版本的话就不用进行多平台配置了。.NET ...转载 2022-04-07 17:30:11 · 1600 阅读 · 1 评论 -
C#Array,List,Dictionary的相互转换
本篇文章会向大家实例讲述以下内容:将Array转换为List 将List转换为Array 将Array转换为Dictionary 将Dictionary转换为Array 将List转换为Dictionary 将Dictionary转换为List首先这里定义了一个“Student”的类,它有三个自动实现属性。class Student { public int Id { get; set; } public string Name { .转载 2022-04-07 17:26:50 · 2327 阅读 · 0 评论 -
C# 退出应用程序的几种方法
Application.Exit();//好像只在主线程可以起作用,而且当有线程,或是阻塞方法的情况下,很容易失灵this.Close();//只是关闭当前窗体。Application.ExitThread();//退出当前线程上的消息循环,并关闭该线程上的所有窗口。 也会失灵Environment.Exit(0); //前面三种方法都不能很好的退出程序,此方法可以完全退出程序,这个要强制得多。Process.GetCurrentProcess().Kill();//此方法完全奏效,绝对是完全退出。原创 2022-04-07 17:16:09 · 4786 阅读 · 0 评论 -
Json随着编码的延续,终究还是会遇到那剩下的 20% 功能介绍
一:背景1. 讲故事在开始本文之前,真的好想做个问卷调查,到底有多少人和我一样,对 JsonConvert 的认识只局限在SerializeObject和DeserializeObject这两个方法上(┬_┬), 这样我也好结伴同行,不再孤单落魄😁😁😁,或许是这两个方法基本上能够解决工作中 80% 的场景,对于我来说确实是这样,但随着编码的延续,终究还是会遇到那剩下的 20% ,所以呀。。。我的场景是这样的:前段时间写业务代码的时候,我有一个自定义的客户算法类型的Model,这个Mode...转载 2022-04-07 16:44:37 · 88 阅读 · 0 评论 -
Newtonsoft 六个超简单又实用的特性【上下篇】
【上篇】一:讲故事看完官方文档,阅读了一些Newtonsoft源码,对它有了新的认识,先总结 六个超经典又实用的特性,同大家一起分享,废话不多说,快来一起看看吧~~~二:特性分析1. 代码格式化如果你直接使用JsonConvert.SerializeObject的话,默认情况下所有的json是挤压在一块的,特别不方便阅读,如下所示: static void Main(string[] args) { var report...转载 2022-04-07 16:41:39 · 4203 阅读 · 0 评论 -
C#查询指定文件夹下的每个文件及子文件夹占空间的大小
static void Main(string[] args) { while (true) { //指定文件夹下的每个子文件夹占空间的大小 Console.WriteLine("--------------------查询指定路径下所有的文件及子文件夹占空间大小-------------------"); Console.WriteLine("请输原创 2022-04-07 14:18:32 · 948 阅读 · 0 评论 -
C#多线程下的调优
C#多线程学习转载 2022-04-07 14:00:26 · 344 阅读 · 0 评论 -
设置VS程序编译时每次Build后版本号都发生更新
assemblyInfo.cs文件内容using System.Reflection;using System.Runtime.CompilerServices;using System.Runtime.InteropServices;// 有关程序集的常规信息通过下列属性集// 控制。更改这些属性值可修改// 与程序集关联的信息。[assembly: AssemblyTitle("WindowsFormsApplication4")][assembly: AssemblyDescript原创 2021-08-11 13:27:56 · 684 阅读 · 0 评论 -
求多边形重心C#版代码
根据已知坐标点计算多边形的重心!public PointF getCenterOfGravityPoint(List<PointF> mPoints) { float area = 0.0f;//多边形面积 float Gx = 0.0f, Gy = 0.0f;// 重心的x、y for (int i = 1; i <= mPoints.Count; i++) {原创 2021-07-23 16:33:00 · 996 阅读 · 0 评论 -
VisionPro通过代码设定模板训练的中心坐标
QQ群日志记录使用代码设定所选模板区域的中心原点,图形界面中可以使用如下图的按钮来操作C#代码中可以使用如下的代码来完成中心原点的设定:private void PatternCenterPoint() { try { if (this.pmalign_.Pattern != null && this.pmalign_.Pattern.TrainImage != null &&am原创 2021-07-21 11:35:35 · 1432 阅读 · 0 评论 -
C#中静态方法与非静态方法
C#的类中可以包含两种方法:C#静态方法与非静态方法。那么他们的定义有什么不同呢?他们在使用上会有什么不同呢?让我们来看看最直观的差别:使用了static 修饰符的方法为静态方法,反之则是非静态方法。比较一、C#静态成员:静态成员属于类所有,非静态成员属于类的实例所有。每创建一个类的实例,都会在内存中为非静态成员新分配一块存储;静态成员属于类所有,为各个类的实例所公用,无论类创建了多少实例,类的静态成员在内存中只占同一块区域。比较二、C#静态方法C#静态方法属于类所有,类实例化前即可使用。非静态原创 2021-07-07 16:49:45 · 677 阅读 · 0 评论 -
C# EXCEL的帮助类,仅使用NPOI,不用安装Office
NPOI相关DLL,直接上Nuget获取这里作为笔记记录一下~using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using NPOI.SS.UserModel;using NPOI.HSSF.UserModel;using NPOI.XSSF.UserModel;using System.Collections;us原创 2021-07-07 16:04:09 · 443 阅读 · 0 评论 -
C#使用代码将多张图片合并为一张
enum ImageMergeOrientation { Horizontal, Vertical }private void CombineImages(FileInfo[] files, string toPath, ImageMergeOrientation mergeType = ImageMergeOrientation.Vertical) { //change the location to store原创 2021-07-05 09:29:50 · 4401 阅读 · 2 评论 -
C# 关于文件路径的获取及当前exe所在路径的获取
C#获取exe当前路径的方法集合:string str = this .GetType().Assembly.Location;// 获取当前进程的完整路径,包含文件名(进程名)result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录 + .exe文件名)string str = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;// 获取新的 Process 组件并将其与当前活动原创 2021-07-02 14:47:28 · 2179 阅读 · 0 评论 -
C# 读写编辑INI文件-完整详细版
INI文件概念INI就是扩展名为"INI"的文件,其实他本身是个文本文件,可以用记事本打开,主要存放的是用户所做的选择或系统的各种参数。C#读写ini文件其实并不是普通的文本文件.它有自己的结构.由若干段落(SECTION)组成,在每个带括号的标题下面,是若干个以单个单词开头的关键字(KEYWORD)和一个等号,等号右边就是关键字的值(VALUE),例如,[Section1]KeyWord1 = Value1 KeyWord2 = Value2 ... [Section2]KeyWor转载 2021-06-30 08:58:20 · 23554 阅读 · 11 评论 -
VS(C#)调用Basler相机SDK采集图像及基本功能设定
使用到了Basler的相机,利用C#编写的SDK,下面进行简单的整理记录。首先引用basler的动态库文件,具体引用位置如下:安装目录\Basler\pylon 5\Development\Assemblies\Basler.Pylon\x64\Basler.Pylon.dllusing System;using System.Collections.Generic;using System.Linq;using System.Text;using HalconDotNet;using B转载 2021-06-24 16:59:21 · 2634 阅读 · 0 评论 -
c#中Convert.ChangeTypede意义?泛型方法返回值类型转换
**应用场景一:**如果你知道当前类型应当为string或其他已知类型的化的话,转换没有意义,ChangeType往往用在不知道当前类型应当是什么的情况下,比如有个泛型方法要求从double类型转换为指定的T类型,此时只能因为显式转为T肯定是不行的,只能ChangeType。例如:我想转成int int xx = GetValue<int>("1"); private static T GetValue<T>(object obj)原创 2021-06-11 10:18:24 · 3100 阅读 · 1 评论