![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c#上位机编程
文章平均质量分 86
偏执灬
这个作者很懒,什么都没留下…
展开
-
C# 解决串口接收数据不完整处理方法
使用缓存机制完成。首先通过定义一个成员变量List<byte>buffer=newList<byte> (4096);用来存放所有的数据,在接收函数里,通过buffer.AddRange()方法不断地将接收到的数据加入到buffer中,并同时对 buffer中的数据进行检验,如果达到一定的长度并且校验结果正确(校验方法在发送方和接收方一致),再进行处理。//针对数据协议:head + len + playload + check 类型private...原创 2020-12-22 19:13:37 · 11851 阅读 · 6 评论 -
C# winform存储配置文件之App.config文件读写
有时候一些用户的配置需要写入在本地,不能每次程序启动都让用户重新设置一下吧。下面先说基本用法:1、创建winform项目之后自动会生成App.config文件,如果默认没有,就对项目右键-新建项-APP配置文件这个文件创建后自动就有的,如果没有就新建一个,我们可以往里面添加需要的数据:<?xml version="1.0" encoding="utf-8" ?><configuration> <appSettings> <ad转载 2020-12-22 17:44:45 · 2577 阅读 · 0 评论 -
C#窗体缩放时窗体上控件同缩放比例变化
1.定义2个全局float 变量X,Y,用来记录窗体默认窗口时的宽度和高度。 floatX;//默认窗口的宽度 floatY;//默认窗口的高度2.窗体Load的时候将窗体的宽度、高度赋值给X、Y。 private voidForm1_Load(objectsender,EventArgse) { X =this.Width;//将窗体的宽度赋值给X Y =this.Height;//将窗体的高度赋值给Y...转载 2020-12-16 16:55:52 · 740 阅读 · 2 评论 -
C# 上位机使用LibUsbDotNet方法实现USB通信
一、usb驱动安装安装步骤如下: 按照如图所示操作 第三步:安装设备驱动步骤如下,其中保存配置文件到任意目录下即可: 至此 usb驱动安装完成,USB设备可以被上位机识别。 备注说明:最后一步安装驱动可能受系统权限限制,需求更改usb安装设备权限,具体操作步骤参考如下链接操作:https://jingyan.baidu.com/article/73c3ce2853802ce50343d918.html《Win...原创 2020-07-01 15:18:35 · 9659 阅读 · 3 评论 -
c# 在LibUsbdotnet库进行USB操作时使用GetOverlappedResult()接口异常解决办法
在 System.Runtime.InteropServices.SafeHandle.DangerousAddRef(Boolean& success) 在 System.StubHelpers.StubHelpers.SafeHandleAddRef(SafeHandle pHandle, Boolean& success) 在 LibUsbDotNet.Internal.Kernel32.GetOverlappedResult(SafeHandle hDevic...原创 2020-07-01 15:18:30 · 1058 阅读 · 0 评论 -
c# 实现三级联动
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using Newtonsof...原创 2018-09-12 16:21:51 · 3390 阅读 · 0 评论 -
c# 自定义可序列化
一、定义一个序列化的类(包含二进制,xml,json 三种方法) public class SerializeHelper { #region 私有的 #region 字段 #endregion #region 方法 #endregion #endregion ...原创 2018-10-19 16:44:16 · 3139 阅读 · 0 评论 -
c# 序列化与反序列化
序列化又称串行化,是.NET运行时环境用来支持用户定义类型的流化的机制。其目的是以某种存储形成使自定义对象持久化,或者将这种对象从一个地方传输到另一个地方。 .NET框架提供了两种串行化的方式:1、是使用BinaryFormatter进行串行化;2、使用SoapFormatter进行串行化;3、使用XmlSerializer进行串行化。第一种方式提供了一个简单的二进制数据流以及某些附加的...转载 2018-10-19 16:50:56 · 1618 阅读 · 0 评论 -
c#哈希表和字典的区别
Hashtable 和 Dictionary <K, V> 类型 1):单线程程序中推荐使用 Dictionary, 有泛型优势, 且读取速度较快, 容量利用更充分.2):多线程程序中推荐使用 Hashtable, 默认的 Hashtable 允许单线程写入, 多线程读取, 对 Hashtable 进一步调用 Synchronized()方法可以获得完全线程安全的类型. 而Dic...转载 2018-10-24 11:22:52 · 12638 阅读 · 2 评论 -
c# 读懂反射作用
前期准备在VS2017中新建一个控制台应用程序(我的命名是ReflectionStudy),这个项目是基于.net 4.0。接着我们打开Program.cs文件,按照如下在Program中写一个我们自己的类: 1 public class RefClass 2 { 3 private int _test3; 4 ...转载 2018-10-24 11:51:05 · 2120 阅读 · 0 评论 -
c# 开发一个基于硬件交互的SDK(DLL)
作为上位机与硬件交互产品,经常需要提供硬件产品SDK给客户,客户根据SDK进行二次开发的情况,今天就写一个如何简单的SDK,并基于串口交互(有些基于tcp网络),只是提供一个思路。一、定义一个上位机与硬件的交互协议类: 如下namespace devicedapi{ public class datapro { private byte Dat...原创 2018-10-24 15:15:55 · 7218 阅读 · 0 评论 -
c# 事件(Event)机制
重新熟悉一下委托和事件。通过事件使用委托事件在类中声明且生成,且通过使用同一个类或其他类中的委托与事件处理程序关联。包含事件的类用于发布事件。这被称为 发布器(publisher) 类。其他接受该事件的类被称为 订阅器(subscriber) 类。事件使用 发布-订阅(publisher-subscriber) 模型。发布器(publisher) 是一个包含事件和委托定义的对象。事件和...原创 2018-10-24 18:43:56 · 14832 阅读 · 2 评论 -
c#学习笔记之Application.DoEvents应用
Visual Studio里的摘要:处理当前在消息队列中的所有 Windows 消息。交出CPU控制权,让系统可以处理队列中的所有Windows消息 比如在大运算量循环内,加Application.DoEvents可以防止界面停止响应因为winform的消息循环是一个线程来处理,那么假如你的某个操作比较耗时,那么消息处理得等你这个耗时操作做完了才能继续,而Applicati转载 2016-09-20 15:53:27 · 32943 阅读 · 2 评论 -
c#串口通信之adc数据采集
使用c#直接拖串口控件serialPort1 设置属性即可。using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System原创 2016-10-10 22:50:50 · 3994 阅读 · 0 评论 -
c#上位机多通道ADC采样波形显示
啥也别说了,先看效果图吧!!!如下图:1.主程序.cs文件using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Threading;原创 2016-10-18 17:27:06 · 5784 阅读 · 9 评论 -
c# 事件处理机制
在所有关于C#事件机制的介绍中,我更倾向于发布者/订阅者(Publisher/Subscriber)这种描述。理解事件机制并不是一件容易的事情,它所涉及的思想值得我们好好去研究。本文资源来自《C#与.NET技术平台实战演练》——中国青年出版社谈到事件,我们涉及到两个角色:事件发布者(Publisher)和事件订阅者(Scriber),也可以说是事件发送者(Sender)和事件接收者转载 2016-11-29 13:01:07 · 679 阅读 · 0 评论 -
c#学习笔记对IEnumerable<T>,IDictionary<Tkey,TValue>,ICollection<T>,IList<T>的总结
对IEnumerable,IDictionary,ICollection,IList的总结1、IEnumerable接口和IEnumerable接口实现了IEnumerable接口的集合表明该集合能够提供一个enumerator(枚举器)对象,支持当前的遍历集合。IEnumerable接口只有一个成员GetEnumerator()方法。IEnumerator接口实现了IEn转载 2016-11-30 14:38:22 · 4220 阅读 · 0 评论 -
c#学习笔记之使用 TableLayoutPanel 控件设置窗体布局
使用 TableLayoutPanel 控件设置窗体布局在 Visual Studio IDE 左侧,找到“工具箱”选项卡。 选择“工具箱”选项卡,随即将显示工具箱。(或者,在菜单栏上,依次选择“视图”、“工具箱”。)选择“容器”组旁边的小三角形符号以打开该组,如下图所示。“容器”组可以向窗体中添加类似按钮、复选框和标签这样的控件。 在工具箱中双转载 2016-11-30 15:16:10 · 44600 阅读 · 3 评论 -
c#学习笔记之文件操作
FileStream常用的属性和方法: 属性: CanRead 判断当前流是否支持读取,返回bool值,True表示可以读取 CanWrite 判断当前流是否支持写入,返回bool值,True表示可以写入 方法: Read() 从流中读取数据,返回字节数组 Write() 将字节块(字节数组)写入该流 Seek() 设置文件读取或写入的起始位置 Fl原创 2016-11-15 14:59:23 · 709 阅读 · 0 评论 -
c# 打开外部可执行文件exe。
一、打开程序。 先介绍 System.Diagnostics.Process类:用来启动和停止进程的。 1、 Process pr = new Process();//声明一个进程类对象 process.StartInfo.FileName = "C:\\Keil_v5\\UV4\\UV4.ex原创 2017-03-23 18:52:42 · 19481 阅读 · 0 评论 -
c#上位机实验
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.W原创 2017-09-26 17:05:09 · 1604 阅读 · 2 评论 -
c# 多线程-信号量使用
信号量说简单点就是为了线程同步,或者说是为了限制线程能运行的数量。那它又是怎么限制线程的数量的哩?是因为它内部有个计数器,比如你想限制最多5个线程运行,那么这个计数器的值就会被设置成5,如果一个线程调用了这个Semaphore,那么它的计数器就会相应的减1,直到这个计数器变为0。这时,如果有另一个线程继续调用这个Semaphore,那么这个线程就会被阻塞。获得Semaphore的线程处理完它的逻辑...转载 2018-06-11 16:47:06 · 2186 阅读 · 0 评论 -
c# 多线程 互斥量
我们在做程序时,有时候希望在一台电脑上面只有一个进程实例在运行,利用Mutex互斥量可以实现了这个功能,方法及步骤如下:接下来分控制台程序和Winform程序两种情况下实现此功能1.控制台程序[csharp] view plain copyusing System; using System.Collections.Generic; using System.Linq; using Syst...转载 2018-06-11 16:51:01 · 2120 阅读 · 0 评论 -
c#学习笔记之Invoke()作用分析
Invoke()的作用是:在应用程序的主线程上执行指定的委托。一般应用:在辅助线程中修改UI线程( 主线程 )中对象的属性时,调用this.Invoke(); 1. //测试的窗体 2. public class TestForm : Form 3. { 4. //创建一个Button对象 5. private Button button = new B原创 2016-09-19 17:13:10 · 21003 阅读 · 0 评论