C#学习
菜鸟翁
三人行必有我师
展开
-
添加右键属性按钮
添加右键属性原创 2022-12-11 20:52:45 · 102 阅读 · 0 评论 -
跨线程操作控件并且不阻塞主线程
异步线程调用委托显示空间不阻塞主线程原创 2022-12-11 09:36:00 · 139 阅读 · 0 评论 -
判断数字是否转换成功
判断数字是否转换成功原创 2022-12-09 12:40:07 · 124 阅读 · 0 评论 -
设置后台线程有助于不阻塞前台线程
设置后台线程有助于不阻塞前台线程原创 2022-12-09 09:52:25 · 77 阅读 · 0 评论 -
C# bytes转long
C# bytes转long原创 2022-12-01 17:50:53 · 918 阅读 · 0 评论 -
C#bitToByte
c#BitToByte原创 2022-12-01 16:56:08 · 477 阅读 · 0 评论 -
winform快捷键
Winform快捷键原创 2022-11-10 13:45:12 · 891 阅读 · 0 评论 -
C# byte/int转换
inttobyte bytetoint原创 2022-10-31 16:55:14 · 554 阅读 · 0 评论 -
C#生成DLL文件
C#生成DLL原创 2022-09-27 22:37:35 · 336 阅读 · 0 评论 -
ListBox数据过大引发线程中断
线程中断原创 2022-08-19 08:21:49 · 133 阅读 · 0 评论 -
C# ListBox内容过长无法完全显示,添加ToolTip控件
C# ListBox无法完全显示原创 2022-08-18 16:01:10 · 1261 阅读 · 0 评论 -
调用系统系统命令
笔记原创 2022-07-04 17:26:53 · 119 阅读 · 0 评论 -
复制文件新路径
private void BtnNewRecipe_Click(object sender, EventArgs e) { int index= Projectpaths[newRecipeForm.lBRecipe.SelectedIndex].LastIndexOf('\\'); string Newpath= Projectpaths[newRecipeForm.lBRecipe.SelectedIndex].Substring(0, in.原创 2021-04-30 17:37:51 · 116 阅读 · 1 评论 -
///R625报错
///R625报错 /// try { if (cameraTool.CurFramGrabber != null) { cameraTool.CurFramGrabber.Disconnect(true); } } catch (Exception ex原创 2021-04-28 14:47:15 · 96 阅读 · 0 评论 -
cogDisplayStatusBarV21应用
添加事件鼠标移动事件cogDisplayStatusBarV21.Display = cogRecordDisplay1;原创 2021-04-25 15:33:00 · 922 阅读 · 2 评论 -
暂时当前线程
public EventWaitHandle _waitHandle = new AutoResetEvent(false);//线程同步事件 _waitHandle.WaitOne();//暂停当前线程 _waitHandle.Set();//继续当前线程原创 2021-04-19 15:31:28 · 67 阅读 · 0 评论 -
C# 无标题窗体移动
一.MouseDown\MouseMove事件方法实现第一种方法我采用常用的根据MouseDown、MouseMove、MouseUp、MouseLeave事件中鼠标移动的距离,窗体坐标也跟着移动的方法.具体代码如下:bool formMove = false; //是否开始移动int currentXPosition = 0; //当前鼠标X坐标int currentYPosition = 0; //当前鼠标Y坐标 //函数:鼠标按下private vo转载 2021-04-14 17:42:19 · 143 阅读 · 0 评论 -
Winform常用设置
lableAutosize取消自动调整大小TextAlign标签中文本的位置FormFormBorderSytle窗体的边框和标题栏外观行为原创 2021-04-14 17:05:28 · 482 阅读 · 0 评论 -
C#保存VisionPro图片
System.IO.Directory.CreateDirectory(@"..\\A\\B\\C\D");//创建目录 CogImageFileTool cogImageFileTool1=new CogImageFileTool();//创建对象 cogImageFileTool1.InputImage = cameraTool.Image; cogImageFileTool1.Operator.Open(@原创 2021-04-12 17:44:30 · 2570 阅读 · 0 评论 -
通过RS232打开光源
Com 初始化 private void btnClickImage_Click(object sender, EventArgs e) { foreach (string PortName in System.IO.Ports.SerialPort.GetPortNames()) { if (PortName.Contains("COM5"))//COM1 {原创 2021-04-10 16:32:47 · 725 阅读 · 0 评论 -
C#S1200modbustcp通讯
命名空间using HslCommunication.Profinet.Siemens;using HslCommunication; //声明西门子PLC S1200通信 private SiemensS7Net Siemens1200TcpNet = null; private readonly SiemensPLCS SiemensPLCSelected = SiemensPLCS.S1200;//初始化西门子通讯设置 Siemens1200TcpNet原创 2021-04-06 13:40:59 · 1371 阅读 · 0 评论 -
C# 使用多线程,在关闭窗体时 怎么关闭窗体的所有线程,使程序退出。
this.Close(); 只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退出;Application.Exit(); 强制所有消息中止,退出所有的窗体,但是若有托管线程(非主线程),也无法干净地退出;Application.ExitThread(); 强制中止调用线程上的所有消息,同样面临其它线程无法正确退出的问题;System.Environment.Exit(0); 这是最彻底的退出方式,不管什么线程都被强制退出,把程序结束的很干净。原创 2021-03-30 23:50:55 · 1470 阅读 · 2 评论 -
线程间操作无效:从不是创建控件的线程访问它的三种方法
我们在ui线程创建的子线程操作ui控件时,系统提示错误详细信息为:线程间操作无效: 从不是创建控件“XXX”的线程访问它。就我知道的有三种方法,先看一下msdn的介绍:访问 Windows 窗体控件本质上不是线程安全的。如果有两个或多个线程操作某一控件的状态,则可能会迫使该控件进入一种不一致的状态。还可能出现其他与线程相关的 bug,包括争用情况和死锁。确保以线程安全方式访问控件非常重要。看下解决办法吧1、把CheckForIllegalCrossThreadCalls设置为false2、利用委原创 2021-03-30 15:47:14 · 4695 阅读 · 0 评论 -
C#(winform)为button添加背景图片
1 this.btnReset.BackgroundImage = global::Test.Properties.Resources.btn_reset_out;//设置图片的路径2 this.btnReset.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;//设置图片的显示模式,Stretch表示填满button,如果图片不够button大,就会拉伸图片详细教程...原创 2021-03-27 13:40:09 · 1488 阅读 · 0 评论 -
C#中鼠标指向button控件,有提示信息,
在按钮的MouseEnter事件中写如下代码:ToolTip p = new ToolTip();p.ShowAlways = true;p.SetToolTip(this.button1, “要显示的文字”);不懂再问。。。原创 2021-03-27 13:20:04 · 813 阅读 · 0 评论 -
C#中如何表示文件相对路径
方法一:Application.StartupPath 可以获取当前程序运行的路径,可以和相对路径拼接成完整路径,也就不需要相对路径了方法二:相对路径C#也是支持的,用".“和”…“表示,”.“代表当前目录,”…"代表上一级目录。假设你的EXE在 D:\workspace\WebApplication2那么你的XML文件的路径就是".\XML\XML2\333.XML"如果你的EXE在 D:\workspace\WebApplication2\bin那么你的XML文件的路径就是"…\XML\X转载 2021-03-27 11:18:54 · 5300 阅读 · 0 评论 -
C# ?.Invoke()什么意思
若event不为null,则invoke,这是C#6的新语法。 ?.称为空值传播运算符。//C# 5var handler = Event;if (handler != null){handler(source, e);}//C# 6var handler = Event;handler?.Invoke(source, e);原创 2021-03-22 15:20:17 · 3569 阅读 · 1 评论 -
C#Json读写数据
#region//Json参数类 public class CameraParameters { /// <summary> /// 相机名字 /// </summary> public string CameraName { get; set; } /// <summary> /// 相机序列号 /// </summary>原创 2021-03-18 16:02:17 · 986 阅读 · 0 评论 -
XML修改、读取
updatexml();//修改节点(数据)//修改节点(数据)private static void updatexml() { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load("ABC.xml");//加载xml文件,文件 XmlNode xns = xmlDoc.SelectSingleNode("items");//查找要修改的节点原创 2021-03-15 16:44:39 · 247 阅读 · 0 评论 -
委托事件EventHandler(二)
发布者 public class Marry { public delegate void MarryEventArgs(string msg); public event MarryEventArgs MarryEvent; public void Sendmsg(string msg) { if (msg!=null) { MarryEvent(m原创 2021-03-03 14:48:51 · 74 阅读 · 1 评论 -
委托事件EventHandler(一)
创建委托事件(发布者)public class BridgeGroom { public delegate void MarrHandler(string msg);//自定义委托 public event MarrHandler MarryEvent; public void SendMarriageMsg(string msg) { if (MarryEvent!=null) {.原创 2021-03-03 14:46:49 · 179 阅读 · 0 评论 -
C#几个经常用到的字符串截取
一、1、取字符串的前i个字符(1)string str1=str.Substring(0,i);(2)string str1=str.Remove(i,str.Length-i);2、去掉字符串的前i个字符string str1=str.Remove(0,i);string str1=str.SubString(i);3、从右边开始取i个字符:string str1=str.SubString(str.Length-i);string str1=str.Remove(0,str.Lengt原创 2021-02-02 11:15:07 · 2449 阅读 · 0 评论 -
通过代码创建XML文档
//通过代码创建XML文档 // 1、引用命名空间 // 2、创建XML对象 XmlDocument doc = new XmlDocument(); //3创建第一行描述信息,并且添加doc文档中 XmlDeclaration dec= doc.CreateXmlDeclaration("1.0", "UTF-8",null); doc.AppendC原创 2021-01-25 11:36:36 · 254 阅读 · 0 评论 -
C#for和foreach的区别 简便理解(集合已修改可能无法执行枚举操作。)
C#for和foreach的区别 简便理解for:可以用于任何形式的重复行为,在循环体中,可以进行任何操作;遍历速度慢,执行效率低;foreach:只能用于遍历,不能更改循环目标,遍历速度快,执行效率高;总结:若需要遍历集合或数组,并且遍历的过程中只需要读取而不会更改使用Foreach最为合适;...转载 2021-01-18 23:23:42 · 242 阅读 · 0 评论 -
C#使用Math.Abs返回数值的绝对值
int a = -999,b=999; if (Math.Abs(a)>5&&Math.Abs(b)>5) {//Math.Abs(a)=999,Math.Abs(b)=999 Console.WriteLine("结果True"); }原创 2021-01-16 10:26:35 · 1423 阅读 · 0 评论 -
Log4net日志
App.config写内容<?xml version="1.0" encoding="utf-8" ?><configuration> <configSections> <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/> </configSections> <appSettings> </appSetti.原创 2021-01-09 00:19:48 · 87 阅读 · 0 评论 -
事件委托EventHandler<ClassE>与EventHandler
class Program { static void Main(string[] args)//创建实例事件对象 { ClassE classE = new ClassE("张三", '男'); ClassS classS = new ClassS(); classS.ResultClass(classE); Console.ReadKey();原创 2020-12-30 15:57:16 · 107 阅读 · 0 评论 -
C#委托和事件的使用示例
一、委托使用委托时要先实例化,和类一样,使用new关键字产生委托的新实例,然后将一个或者多个与委托签名匹配的方法与委托实例关联。随后调用委托时,就会调用所有与委托实例关联的方法。与委托关联可以是任何类或者结构中的方法,可以是静态方法,只要是可以访问的方法都可以。1.创建一个委托类型使用关键字delegate(委托)输出如下:2.一个委托实例,可关联多个方法:其中D4 = TestMethod1;用“=”而不能“+=”,是因为之前D4未实例化,可以使用下面的代码:MyDelegate D4转载 2020-12-28 09:24:55 · 270 阅读 · 0 评论 -
线程池
Task.Factory.StartNew(() => { lock (new一个object变量) {//程序.....................//Task.Factory.StartNew不是直接创建线程,创建的是任务,它有一个任务队列,然后通过任务调度器把任务分配到线程池中的空闲线程中,如果任务的数量比线程池中的线程多,线程池的线程数量还没有到达上限,就会创建新线程执行任务。如果线程池的线程已到达原创 2020-12-18 23:11:36 · 108 阅读 · 2 评论 -
接口的应用 适用于经常修改,直上一个规范的地方
Main程序 class Program { static void Main(string[] args) { InterfaceClass interfaceClass = new InterfaceClass(); int num = interfaceClass.Sub(55, 3); Console.WriteLine($"55-3={num}");原创 2020-12-17 17:10:54 · 97 阅读 · 0 评论