
C#
文章平均质量分 58
星河队长
上位机自动化 控制软件,视觉识别,软件算法
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C#Winform的控件基类Control
需要注意的是,Control类的属性和事件非常多,上述列举的只是一些最常用的和最基本的。同时,不同的控件可能会有自己特有的属性和事件,这些属性和事件在继承自Control类的基础上进行了扩展。MouseDown、MouseEnter、MouseMove、MouseHover、MouseLeave 和 MouseUp:分别当鼠标在控件上按下、移入、移动、悬停、移出和释放时发生。Height 和 Width:分别获取或设置控件的高度和宽度。TabIndex:获取或设置在控件的容器的控件的Tab键顺序。原创 2024-10-22 17:13:16 · 694 阅读 · 0 评论 -
简单实现log记录保存到文本和数据库
简单保存记录到txt,sqlite数据库,以及console监控记录。原创 2024-09-26 14:38:52 · 437 阅读 · 0 评论 -
Task vs Thread
总结来说,Task是面向任务的并发模型,更适合现代C#应用开发,它在大多数情况下提供了一个更高效、更易用的并发解决方案。Task是对线程的进一步封装,提供了丰富的API来管理异步操作,如取消、延续任务、异常处理等。底层实现: 尽管Task是更高层次的抽象,但它在内部仍然可能使用Thread来执行任务,尤其是在没有其他更高效机制(如IO完成端口)可用的情况下。C#中的Task和Thread都是用于实现多线程和并发操作的重要组件,但它们在设计哲学、使用场景和功能特性上存在显著差异,同时也有一些内在的联系。原创 2024-06-10 19:14:52 · 597 阅读 · 0 评论 -
C#有哪些方式实现回调函数、处理异步操作或响应某些条件时的动作
尽管这种方式在现代C#编程中较少使用,但IAsyncResult接口和AsyncCallback委托仍然存在于.NET框架中,用于支持基于IAsyncResult的异步模式(APM)。委托类似于C/C++中的函数指针,但它们是类型安全的。使用诸如Promises(在C#中为Task)或Async/Await的模式可以避免嵌套回调(回调地狱),使代码更易于阅读和维护。C#提供了预定义的委托类型Action和Func,用于封装没有返回值的方法(Action)和具有返回值的方法(Func)。原创 2024-06-09 00:45:41 · 1074 阅读 · 0 评论 -
编程中有哪些工具和方法可以帮助开发者在开发过程中捕获和避免潜在的错误
当你在代码中放置这样的断言时,你实际上是在告诉编译器:“在调试模式下,我确信这个条件(在这里是 fsm!= null)必须为真。除了 Debug.Assert,还有其他断言库,如 NUnit、xUnit 和 MSTest,它们提供了更丰富的断言方法和更好的测试框架。在编程中,除了 Debug.Assert,还有一些类似的工具和方法可以帮助开发者在开发过程中捕获和避免潜在的错误。防御性编程:使用断言是防御性编程的一部分,它有助于在错误发生时立即捕获它们,而不是让它们潜伏在代码中,直到更晚的时候才导致问题。原创 2024-05-16 10:23:55 · 370 阅读 · 0 评论 -
System.ComponentModel.DataAnnotations 使用介绍
RequiredAttribute:确保数据字段的值是必须的,不能为null或空。KeyAttribute:标识一个属性作为实体的主键。MaxLengthAttribute 和 MinLengthAttribute:定义字符串属性的最大和最小长度。StringLengthAttribute:同时定义字符串属性的最大和最小长度。RegularExpressionAttribute:用于验证属性值是否符合指定的正则表达式。RangeAttribute:用于验证数值属性是否在指定的范围内。原创 2024-04-08 22:09:35 · 1286 阅读 · 0 评论 -
C# WinForms应用程序中,FileSystemWatcher使用监视文件系统更改
在C# WinForms应用程序中,FileSystemWatcher 类用于监视文件系统更改,例如文件的创建、删除、修改以及目录的更改。现在,当你运行WinForms应用程序时,FileSystemWatcher 将开始监视你指定的目录中的文件更改,并在触发相应的事件时显示消息框。你可以根据需要调整事件处理程序中的逻辑,比如将更改记录到日志文件中,而不是显示消息框。在窗体的构造函数或某个初始化方法中,创建 FileSystemWatcher 的实例,并设置其属性以监视特定的目录和文件类型。原创 2024-03-21 21:15:10 · 655 阅读 · 0 评论 -
C#序列化和反序列化以及json保存和读取
什么是 Json ? Json【javascript对象表示方法】, 它是一个轻量级的数据交换格式,我们可以很简单的来读取和写它, 并且它很容易被计算机转化和生成,它是完全独立于语言的。Json支持下面两种数据结构:键值对的集合–各种不同的编程语言,都支持这种数据结构;有序的列表类型值的集合–这其中包含数组,集合,矢量,或者序列,等等。Json有下面几种表现...原创 2019-10-17 10:03:52 · 2257 阅读 · 0 评论 -
c#写入生成Json格式文本
“{“header”:{“head1”:“head1”,“head1”:“head1”},“body”:{“head1”:“head1”,“head1”:“head1”},“result”:{“head1”:“head1”,“head1”:“head1”}}”应用下文代码可以得到以上结果;using Newtonsoft.Json; static List<string&...原创 2019-10-14 17:01:39 · 5815 阅读 · 0 评论 -
C#批量更改控件显示名称(举例中英文语言切换)
在WinFrom开发中有中英文切换需求时需要批量更改控件的显示名称可以将控件名字和显示名称保存在xml文件中可以将控件保存进文件,也可从文件中加载来更改显示名原创 2022-10-19 17:19:10 · 1257 阅读 · 0 评论 -
C#采用反射获取字段的名字和注释自动添加到表格显示和修改
C# 自动编程,自动获取字段的名称和值,加载到表中显示、修改、保存原创 2022-04-16 13:43:09 · 2360 阅读 · 0 评论 -
C#用异步操作解决界面卡顿问题
新建窗体1 放一个按钮button事件如下,界面卡死 private void button1_Click(object sender, EventArgs e) { int i = 0; while (true) { Thread.Sleep(20); i++; if (i > 8000) return;原创 2021-10-15 10:23:48 · 6742 阅读 · 2 评论 -
VS新建组件类设计(以串口通讯为例)
新建项目新建项目ComponentTest,在项目中添加Component组件,如下图在新的组件类中进行编辑```csharpusing System;using System.Collections.Generic;using System.ComponentModel;using System.Diagnostics;using System.Linq;using System.Text;using System.Threading.Tasks;using System.IO原创 2021-03-20 20:43:41 · 471 阅读 · 0 评论 -
C#实现按键控制窗体移动
实现按键控制窗体移动:1 打开窗体接收按键事件的属性设置: mform.KeyPreview = true;2 更改窗体的位置this.Location 的值using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threa原创 2020-11-11 16:04:51 · 1333 阅读 · 0 评论 -
异步线程使用的阻塞问题async await 举例
问题描述:我们在按钮事件下直接调用异步线程,会出现阻塞,程序卡死现象。如图点击直接运行按钮的效果解决方法:在线程内运行异步线程,可以解决阻塞问题。using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.T原创 2020-11-02 16:15:47 · 1299 阅读 · 0 评论 -
DataGridView控件实现行折叠效果
一 重写表格using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using System.Drawing;using System.Drawing.Drawing2D;namespace DataGrideViewControl{ public clas原创 2020-10-12 19:36:50 · 4538 阅读 · 3 评论 -
C#的扩展方法
前言:上篇 序列化效率比拼——谁是最后的赢家Newtonsoft.Json 介绍了下序列化方面的知识。看过Demo的朋友可能注意到了里面就用到过泛型的扩展方法,本篇打算总结下C#扩展方法的用法。博主打算分三个层面来介绍这个知识点,分别是:.Net内置对象的扩展方法、一般对象的扩展方法、泛型对象的扩展方法。 什么是扩展方法?回答这个问题之前,先看看我们一般情况下方法的调用。类似这样的通用方法你一定写过:复制代码static void Main(string[] args){ string s转载 2020-09-28 19:35:23 · 296 阅读 · 0 评论 -
C#图形教程画笔画刷等
C#图形编程C#提供了一整套相当丰富的类库、方法以及事件以供开发者使用。C#还引入了GDI+,它是由GDI演变而来的,具有比GDI更强大的功能而且简化了程序员的编程工作。所以开发者运用这些,就可以很方便的开发出具有强大图形图像功能的应用程序了。本文,笔者就通过一些实例像读者介绍一下C#中的图形编程的基本知识。简单实例:首先,让我们从例子开始,以下是一个最简单的实例: 在上面的实例中,我们用到了一个方法:DrawString(),它带有5个参数。同时,我们发现在运用DrawString()方法以前转载 2020-07-02 13:24:47 · 3486 阅读 · 0 评论 -
params参数使用实现任意长的参数
基本实现计算总数static void Main(string[] args) { int[] n = { 99, 88, 77 }; Test("张三", n); Console.ReadKey(); } public static void Test(string name, int[] score) { int sum = 0;转载 2020-06-30 10:21:27 · 1032 阅读 · 0 评论 -
yield return作用
yield return作用在 return 时,保存当前函数的状态,下次调用时继续从当前位置处理。示例说明如下代码所示,主函数使用 foreach 输出 GetNumbers() 方法的数据。函数一共有3个数据,调用了三次此函数的处理部分,而初始化部分只调用了一次。使用方法解析这个函数在处理循环时可以每生成一个数据就返回一个数据让主函数进行处理。在单线程的程序中,由于不需要等所有数据都处理好再返回,所以可以减少对内存占用。比如说有3个数据,如果一次性处理好返回,需要占用3个内存单位,而一个个返回转载 2020-06-30 10:18:31 · 506 阅读 · 0 评论 -
IEnumerable和IEnumerator,自定义实现可枚举类
//IEnumerable是一个可枚举类并且返回String类型的枚举类IEnumeratorusing System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Collections;namespace foreachTest{ //继承IEnumerable接口,其实也可以不原创 2020-06-30 10:16:29 · 764 阅读 · 0 评论 -
C#绘图双缓冲技术--画面闪烁的关键原因分析
GDI+的双缓冲问题终于搞定了, 真是松了一口气!一直以来的误区:.net1.1 和 .net 2.0 在处理控件双缓冲上是有区别的。.net 1.1 中,使用:this.SetStyle(ControlStyles.DoubleBuffer, true);.net 2.0中,使用:this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);怪不说老是提示参数无效,一直也不知道是这个问题,呵呵要知道,图元无闪烁的实现和图元的绘制方法没有多少关系转载 2020-06-23 10:44:16 · 823 阅读 · 1 评论 -
C#在用户控件上自定义属性和属性集合
using System;using System.Collections.Generic;using System.ComponentModel;using System.Drawing;using System.Data;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace WindowsFormsApplication2{原创 2020-06-22 14:38:53 · 3274 阅读 · 2 评论 -
C# 设计模式-工厂方法模式
工厂方法模式优点:1 可扩展 ,加入新产品时,无需对原代码进行修改,只需在项目空间中添加实现接口的类即可2 工厂可以自主设计产品,并且如何创建产品的细节全部在工厂内部,也叫多态工厂模式using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Configuration;using System.R原创 2020-06-15 14:18:12 · 183 阅读 · 0 评论 -
C#LINQ的join和let语句使用方法
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Data;namespace LINQtest{ class Program { public class Student //声明student类 { public in原创 2020-06-11 10:40:08 · 744 阅读 · 0 评论 -
C# linq 的from where select用法举例
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Data;namespace LINQtest{class Program{static void Main(string[] args){string[] mm = new string[] { “2”, “4” ,“2312”, “34原创 2020-06-11 10:23:38 · 2143 阅读 · 0 评论 -
特性标记权限对变量进行数据保存和跟踪
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.ComponentModel;using Newtonsoft.Json;namespace ParamAttribute{ /// <summary> /// 用户信息 /// </summary>原创 2020-06-08 16:18:55 · 211 阅读 · 0 评论 -
反射加载dll程序集调用指定函数
假设在C盘根目录下有个Dog的Dll程序集文件,该程序集文件中包含类Dog 该类中有个狗叫几声的方法,如何通过反射来加载这个C:\Dog.dll,并且调用Dog类里面的Sound方法呢:public class Dog{ public void Sound(int count) { Console.WriteLine("叫了{0}声",count); }}具体如下:首先反射主要用到了System.Reflection命名空间,所以程序中一定要引用这个命名空间。usin转载 2020-06-04 18:13:34 · 255 阅读 · 0 评论 -
C#通过反射和自定义属性,调用方法
反射调用方法可以用在架构只用先写好结口接口具体实现在后面的状况对特定使用的方法可以标记特别属性```csharpusing System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Threading;using System.Reflection;namespace ReflectMethod{原创 2020-06-04 16:24:49 · 1039 阅读 · 0 评论 -
C#通过反射调用方法
用反射调用方法常用于软件架构中假如你定义好了基类和接口,其他人使用基类派生出新的方法,你在不知道有多少类会使用此基类派生,但是你需要调用所有的派生类的方法时,就可以这样,直接遍历相同命名空间中的由基类派生的所有类,然后实例化所有类,调用所有方法using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.T原创 2020-06-04 16:05:58 · 3447 阅读 · 0 评论 -
System.RuntimeType和type的区别typeof和gettype的区别
typeof: The typeof operator is used to obtain the System.Type object for a type.运算符,获得某一类型的 System.Type 对象。Type t = typeof(int);GetType: Gets the Type of the current instance.方法,获取当前实例的类型。int i =...原创 2020-04-21 16:59:46 · 1809 阅读 · 0 评论 -
C#的符号用法@ $?问号用法
$符号用法在字符串前加$相当于对string.format()的简化如:int m_a = 1;int m_b = 2;使用string.format():Console.WriteLine(string.format("this is a:{0},this is b:{1}"),m_a,m_b));使用了$,就可以在原来占位符的地方直接用参数代替Console.WriteLin...原创 2020-04-21 14:52:25 · 10682 阅读 · 0 评论 -
C#的自定义属性AttributeUsage用法
// 描述如何使用一个自定义特性 SomethingAttribute [AttributeUsage(AttributeTargets.All, AllowMultiple = true, Inherited = true)] //********自定义特性SomethingAttribute**************// public cl...转载 2020-04-21 14:40:02 · 2080 阅读 · 0 评论 -
C#操作环境变量
操作环境变量利用System.Environment.GetEnvironmentVariable()方法可以很方便地取得系统环境变量,如: System.Environment.GetEnvironmentVariable(“windir”)就可以取得windows系统目录的路径。以下是一些常用的环境变量取值:System.Environment.GetEnvironmentVari...转载 2020-04-21 09:42:07 · 2033 阅读 · 0 评论 -
C#获取当前文件路径
获取相对路径(1) 比如:虚拟目录映射: C:\inetpub\wwwroot\MySite那么: “/” 对应 MySite 这个目录当你写 /1.jpg 的时候,那么Asp.net只会到 MySite 下找,即寻找 MySite/1.jpg 是否存在。当你写 ~/1.jpg 的时候,那么Asp.net会在整个 MySite 下找 1.jpg,就算实际路径在 C:\intepub\...原创 2020-04-21 09:39:28 · 2640 阅读 · 0 评论 -
enum利用parse将一个或多个枚举常数的名称或数字值的字符串表示转换成等效的枚举对象。
enum Colors { Red = 1, Green = 2 }; static void Main(string[] args) { Console.WriteLine("The entries of the Colors Enum are:"); foreach (string colorName in ...原创 2020-04-20 13:42:29 · 511 阅读 · 0 评论 -
C#写软件开机自启动
using System;using System.Collections.Generic;using System.ComponentModel;using System.Drawing;using System.Data;using System.Linq;using System.Text;using System.Threading.Tasks;using System.W...原创 2020-01-09 13:41:23 · 284 阅读 · 0 评论 -
C#键盘扫描
using System;using System.Collections.Generic;using System.Diagnostics;using System.Runtime.InteropServices;using System.Text;namespace WindowsFormsApplication2{ public class ScanerHook ...原创 2020-01-09 13:38:01 · 564 阅读 · 0 评论 -
C#写log文件
using System;using System.Collections.Generic;using System.ComponentModel;using System.Drawing;using System.Data;using System.Linq;using System.Text;using System.Threading.Tasks;using System.W...原创 2020-01-09 13:35:48 · 1129 阅读 · 0 评论 -
C#写INI文件
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Runtime.InteropServices;namespace MotionCtrl{ public class IniFi...原创 2020-01-09 13:33:12 · 254 阅读 · 0 评论