- 博客(89)
- 资源 (10)
- 收藏
- 关注
原创 C# 任务(Task)的基础实现
C#中的Task任务是个高级的多线程异步操作方案,优先用 Task.Run + async/await的格式来描述;注意await task和task.Wait()是有区别的,await task不阻塞线程,异步等待,线程可以去干别的,而task.Wait()阻塞线程,死等,线程卡死在这里不动。任务对比Thread线程 更轻量、高效、易维护,还支持返回值、等待、取消等等操作,这么高级的任务功能,大家可以用起来哟!
2026-05-13 12:00:57
450
原创 C# 实现平滑流畅的进度条ProgressBar
本文介绍了C# WinForm中ProgressBar控件的使用方法。主要内容包括:1)通过拖拽添加控件到界面;2)设置核心属性如Min/Max值、样式等;3)针对未知进度使用Marquee跑马灯样式,已知进度则通过异步任务计算百分比并平滑更新UI。关键点在于使用Task后台线程避免界面卡顿,并通过Invoke委托安全更新UI。文章提供了可直接运行的代码示例,适用于文件下载、数据处理等多种进度显示场景。
2026-05-12 10:28:06
463
原创 C# 阻塞队列(BlockingCollection)
队列(Queue)就是排队就跟你在超市结账、车站买票一样,先来的先走后来的后走,这种先进先出(FIFO, First In First Out)的数据结构,就叫队列。阻塞队列(BlockingCollection)简单表述就是需要等待阻塞的队列。队列为空时,取数据线程会自动阻塞休眠,直到有数据才唤醒;队列有上限时,存数据线程会自动阻塞休眠,直到有空位才唤醒,这种会自动等待、不报错、不卡死的队列,就叫阻塞队列。我们在通信和数据处理中经常用到队列,本文就C#中的队列进行简单描述。
2026-05-08 15:09:05
375
原创 C#【SQLite数据库实例】
SQLite是一种轻量级、嵌入式的关系型数据库,具有无服务器、零配置、单文件存储等特点,适合本地应用和嵌入式设备。本文介绍了SQLite的核心特性,并与MySQL进行了对比。重点阐述了C#程序如何集成SQLite,包括添加System.Data.SQLite引用、依赖库配置、编译选项设置等关键步骤。通过SQLiteHelper类实现了数据库连接、建表、增删改查等基本操作,并提供了代码示例。文章强调SQLite适用于本地数据存储场景,不适合高并发或多用户共享环境。
2026-04-26 00:08:24
652
原创 C# 【通过NPIO读写Excel表】
文章摘要: 本文介绍了NPOI在Excel操作中的优势及使用方法。针对Microsoft.Office.Interop.Excel接口存在的兼容性、稳定性等问题,作者推荐使用NPOI替代方案。文章通过对比表格展示了NPOI在环境依赖、性能、并发处理等方面的优势。具体实现部分详细说明了如何在.NET项目中安装NPOI库,并提供了两个核心功能代码示例:1)读取Excel全部数据到字符串数组;2)读取指定列数据到结构体数组。这些代码示例展示了NPOI通过文件流操作Excel的基本方法,包括获取表单、行列数据等关键
2026-04-23 18:30:47
552
原创 C# 通过第三方库INIFileParser管理INI配置文件
很多时候我们是直接调用系统的C++库中的GetPrivateProfileString和WritePrivateProfileString接口来实现管理INI文件的,这个接口最久可以追溯到上个世纪80年代,在VB和C++中都可以调用,我认识这个接口有20年了。在使用C#后,WIN10或WIN11环境下发现了越来越多的问题,主要发现路径上有特殊字符号,如#、+、空格、中文等组合情况下会出现找不到路径的或者出现乱码问题。于是尝试用第三方库来实现。
2025-08-09 22:57:29
7657
1
原创 C# ESC按键实现窗体的最小化
Windows中,微信有个很快捷的功能,就是按ESC将当前的窗体最小化,这个功能用起来非常方便。 而C# WinForm中非常容易实现这个功能,在这里分享一下。
2025-06-20 23:10:06
656
原创 C# 通过ConfigurationManager读写配置文件App.Config
App.config 是 C#中最常用的配置文件类型。 通常位于项目的根目录中,以 XML 格式存储配置信息。App.config 文件可以包含多个配置节,如 appSettings、connectionStrings、system.web 等,用于存储不同的配置信息。如图资源管理器中引用中可以看到它的身影。它是引用.net库中的System.Configuration.dll文件。
2025-05-11 23:09:30
1547
原创 C# 利用log4net 工作台打印和保存到文件
log4net是一个开源的日志记录组件,专为.NET平台设计。它是Apache log4j框架在Microsoft .NET平台的实现,属于Apache Logging Services工程的一部分。log4net提供了一种灵活的方式来记录应用程序中的事件和异常信息,支持将日志输出到多种目标,如控制台、文件、数据库等。log4net具有多目标输出 、支持多种日志级别 、配置灵活性高 、日志架构分层等诸多特点。log4net不仅继承了log4j的优秀特性,还针对.NET平台进行了优化和扩展。
2025-04-27 21:38:48
1241
原创 C# 创建快捷方式文件和硬链接文件
平常我们最常window桌面上点击的左下角带小箭头的文件就是快捷方式了,大家都很熟悉它。快捷方式是Windows提供的一种快速启动程序、打开文件或文件夹的方法。它是应用程序或文件夹、文件的快速链接。快捷方式的一般扩展名为*.lnk。它的作用是为用户提供了访问其他文件、文件夹、应用程序或网站的快捷方式,他本身不是可执行的主题,只是一个指向其他位置的链接或引用。在Windows系统中,硬链接(Hard Link)是一种文件系统中的连接方式。
2024-11-25 00:31:49
761
原创 C# 高精度计时器Stopwatch
1、实例中可以看到精度可以得到0.1微秒使用double类型,我认为算精度很高的吧,不需要这么高精度可以做运算舍去,或者使用其它的更低精度的属性,如stopWatch.ElapsedMilliseconds等。偶然发现C# 的计时器类Stopwatch,他特别适合测量运行时间,使用简单、计时精确。2、复位reset()和停止Stop()的功能都停止了计时器,但是reset,将时间复位为0了,这里注意一下就好。下面用一秒延时的实例来创建一个最简单的实例。小伙伴们可以用起来。
2024-11-05 23:34:27
3301
原创 C# 通过拖控件移动窗体
在C#Form窗体设计中,如果我们不需要使用默认边框设计自己个性化的窗体(FromBorderStyle=none时),这时候你会发现拖动窗体的功能就没有了,这里需要自己构建方法让用户可以拖动整个窗体,这里我们使用前辈的方法实现和描述一下。即可以通过窗体中的控件事件来控制拖动整个窗体,也可以通过系统API 捕获鼠标拖动窗体,下面就介绍这两方法。在项目中添加窗体,我这里添加一个窗体test1,并添加一个label作为操作目标,添加上自己的文字,颜色突显一下。在窗体代码中添加代码,详见下面代码和注释。
2024-09-07 18:52:08
1589
原创 C# 构建可定时关闭的异步提示弹窗
我们在最常用最简单的提示弹框莫过于MessageBox.Show( )的方法了,但是使用久了之后,你会发现这个MessageBox并不是万能的,有事后并不想客户去点击,或者因为非异步运行,而卡住当前线程的运行,于是,就产生了一个只需要提示不需要点击确认的异步弹框需求。可以看到下面的程序中我们建立了一个Form窗体,在窗体中我们除了定义了一些我们需要显示的属性,同时,也定义和启动了一个timer窗体定时器,等待定时器完成一次定时后进入tick,停止定时器以及关闭当前窗体Close()。
2024-04-06 14:12:32
1279
原创 C# 基于MQTT创建客户端的可靠数据传输
MQTT(Message Queuing Telemetry Transport)即 消息队列遥测传输,是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它也是工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。
2023-12-23 21:14:42
2885
原创 C# 使用Thread类建线程
线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。线程是我们程序常用的并行运行控制手段,进程可以是单线程也可以使多线程,这里我用C# 中的Thread类构建线程来简要地说一下线程的基础使用。
2023-11-01 23:50:19
629
原创 C# 实现ESC退出窗口的几种方法
实现ESC退出窗口的几种方法引言方法一 同步按钮法方法二 监听按键法方法三 隐藏按钮法最后引言我们通常用通过点击取消按键或者右上角的“X”盒子退出的方法来实现关闭当前Form窗体。但要使用按键ESC退出关闭窗口就显得更加高级了,实现起来并不困难,但用户体验会提升一个档次,这里我讲一讲我小结的几个方法,我用的VS2019。
2023-01-10 20:02:40
9408
原创 实现好看的文件选择按钮
网页设计中默认的文件路径输入框,即file控件,由于其外观太朴素,也无法很难改变其属性特征,想隐藏路径名称也不行。但是我们可以通过巧妙的方法改成自己想要的样子。- 如果没有直接改变的好方法,我们可以尝试扬长避短的来绕过其外观短处,只使用我们需要的功能部分。- 这里我将用自定义的按键来替换其外观,而file控件,我将其隐藏掉。它虽然被隐藏了,但是其功能仍在。- 开始动手。
2022-12-29 16:56:24
1242
原创 CSS 制作鼠标经过就变立体的按键
按键的效果很多,使用CSS控制颜色字体背景变化都是很常见的,因为它作为外观布局利器,控制简便也是显而易见的。这里我们介绍一下如果通过CSS控制将鼠标经过的时候将鼠标经过按键时候能变成立体效果的方法
2022-12-29 13:57:32
1390
原创 用中文写C#代码
在这里我想说的是C#作为大家熟知的语言,其实已经考虑到了中文的书写,VS2019中,我发现很多地方都可以使用中文,包括工程名、类名、函数名、变量名、控件名、枚举等等等等,都可以写成中文,并不影响编译和使用。最让我觉得方便的是,使用中文替代变量后,基本上就没有写注释的必要了,特别是很多地方使用的枚举项,让我屡试不爽。前几年至今,中文编程语言一直就是一个热门话题,有的说是写中文编程破坏了编程员的编程习惯,中文编程没有任何意义,也有的说是中国计算机软件的进步,脱离的英文的束缚,大大方便了更多人学习编程。
2022-11-15 15:25:29
2525
原创 C# 用VS原生CheckBox控件制作漂亮的开关
CheckBox是VS中常用的控件之一,它是的本质就是一个开关,一个bool型变量。作为开关控制控件非常好用,但是变得很好看很漂亮就感觉要另辟蹊径了,网上有都很多使用相框PictureBox或者按键Button结合bool变量来实现,还有的使用绘图等方式自定义一个控件,我认为这些方法要么抛弃了CheckBox这种便捷的开关功能,要么使用了繁琐复杂的方法来实现,有些得不偿失。这里我介绍使用VS原生的CheckBox,以最简单的方法实现漂亮的开关控件。
2022-11-14 18:18:17
4131
原创 C# numericUpDown之小技巧--读取输入的字符
numericUpDown是C#的常用的控件之一,它是专门用来做数字输入的,我最常用到的属性包括他小数位数(DecimatePlaces属性)、最大最小值(Maximum属性Minimum属性)以及获取数值(value属性), 使用过的人都会发现value值这里往往存在一个小问题,value值虽然一直存在也不会超出范围,但是并不完全是我们看到输入的内容,那么,对于异常输入或者超出范围可以输入字符如何处理。这里我们就讲解一下具体解决方法。
2022-10-14 18:40:38
2597
原创 C# 通过Opacity隐藏背景窗体
通过窗体弹出另一个窗体的时候,不想显示背后的窗体,怎么办?当然,可以通过hide()方法来隐藏窗体。这里介绍另一种方法通过控制Opacity,即,通过不透明度来控制窗体隐藏。可以看到每一个窗体的属性中的icon类别中有一项叫做Opacity的选项,他的用途就是改变窗体的透明度,准确的解释为控件的不透明度百分比。它的值是0%-100%,如果是0%就是完全透明,如果是100%就是完全不透明。
2022-10-03 12:37:54
859
原创 C# Form默认的确认和取消按钮
在C#的form工程中,微软提供了非常方便的确认和取消快捷默认按键设置,该设置直接可以在窗体属性中进行设置。下面以VS2019 为例简单介绍。
2022-10-03 11:17:11
5058
原创 通过MIB和SIB查找频点参数ssb_offset、 offsetToPointA、UL_arfcn
MIB:master information block(主系统信息块)SIB:system information block(系统信息块) 在广播消息中,系统信息是小区级别的信息, 对接入该小区的UE有效。 系统信息可分为MIB ( MasterInformationBlock)和多个 SIB (SystemInformationBlock),每个系统信息包含了与某方面功能相关的树形结构参数集合。 下面以NR—5G举例找到对应DL arfcn:156490 频点的ssb_of
2022-10-03 10:00:31
2944
原创 C语言数据结构Queue----循环队列
无论是单片机还是MCU设备,数据处理应用中经常要使用FIFO队列,而Queue循环队列就是最经典、最基础的数据结构应用。通过大学学习的数据结构导论,结合自己的项目实践,用C语言描述和实现了循环队列的功能。队列简称队,也是一种运算受限的线性表,其规则允许在线性表的一端插入数据,另一端删除数据,插入数据的一端叫做队尾(rear),删除的一端叫做队首(front)。新插入队尾数据的动作叫入队,从队首删除数据的动作叫做出队。出队后,它的后继元素数据将成为新的队首,如果后继数据为空,队列将为空队列。...
2022-08-17 12:41:59
2668
原创 C# Queue队列
目录前言一、队列的新建二、入队三、出队四、清除队列前言我们在处理数据接收或发送的时,为避免数据量较多出现顺序混乱或是多线程共享内存造成数据覆盖问题, 经常需要对数据处理做到先进先出(FIFO)。于是我们经常要队列(Queue),顾名思义也就是和平时排队一样,一个一个的处理,遵循先来后到,不插队,不优先。在C#中,队列封装的很好,使用起来也很方便。它属于系统类的集合(Collection)类中...
2022-08-05 12:13:49
5616
原创 浅谈Foxmail邮件迁移
我们在长期使用Foxmail管理邮箱的时候, 以前的很多老邮件会因为电脑的更换,资料的转移等原因丢失。这里我简单介绍几种如何将邮件文件长期保存和转移的方法。
2022-08-04 20:35:32
18869
原创 STM32 GPIO的基础实现
GPIO 英文全称 general porpose intput output 即,通用输入输出端口。顾名思义,芯片最基本的输入输出接口。STM32或其它单片机芯片的GPIO引脚可以与外部设备连接起来,可以实现与外部设备通讯、控制或者数据采集的功能。...
2022-08-04 19:43:48
1755
1
原创 STM32 串口通讯及实现
广义的串口是针对并口来说的。串口是指设备之间通过一根数据信号线按数据位形式一位一位地传输数据的通讯口,同一时刻只能传输一位(bit)数据。并口则是指用多条数据线进行传输的通讯方式,可以同一时刻并排传输多个数据位的数据口。完整的侦结构见下图,从一个起始位开始,接着是着多位有效数据,一般常规定义为8位,后面的就效验位,为可以选,最后一个就是停止标志位,也就是说8位有效数据的时候一个完整的帧结构就需要10位。...
2022-07-28 16:54:45
4767
2
原创 C# 字符串的内插
您可能不知道C#字符串的表达方式有一种较为简洁的表达方式,即,内插方式,这种方式表达起来更加简单直观,使C#用起来更像高级语言。今天按照常用的方法举几个简单的实例表述一下。
2022-07-19 11:07:55
3500
原创 C# FTP上传和下载文件操作
我们使用C# 需要通过FTP访问服务器时,那么上位机就要作为客户端,通过连接FTP服务来上传下载文件。这里用实际代码和简要的文字描述一下。 见代码描述段中的构造函数 FtpOperation(),在初始化类的同时将用户各个参数初始化。 首先,将服务器IP传递过来,这个是第一重要的。其次,将用户ID、密码以及路径信息获取。最后,将其它参数赋初值。 ...
2022-07-14 15:12:23
6319
2
原创 C# 弹出窗口 show()和showdialog()
我们在构建C# Form窗口的时候经常需要到弹出新的窗口,那么接着就会如何弹出窗口的疑问。这里介绍最常见的两种弹窗方法show()和showdialog()。我在VS2019中构建一个简单的工程来讲解让他们之间的区别。大家也可以动手建一个体验他们之间的区别。 ...
2022-07-10 15:30:37
14934
3
原创 C# VS2019 #region和#endregion的使用
#region和#endregion 是自定义折叠区域的一个宏定义方法,在代码较多时,我们通常将同类的代码归类,然后将其框在一对#region和#endregion之间。对于较大一点的工程来说非常好用,非常方便自己管理代码。 #region表示区域开始,同行右侧上描述名称,#endregion则是区域结尾标识。折叠前后如下图一所示:图一 折叠前图二 折叠后 可以使用点击区域首行左边的加减符来展开和折叠你的区域。 批量操作最为关键,可以是通过右键或者快捷方式来全部折叠后(见图三)......
2022-07-05 15:21:55
9184
1
原创 C# DataGridView控件的基础应用实例
DataGridView我把他叫做网格数据控件 。我们在显示表格数据的时候,经常会用想到用它, 他就像Excel表格一样。我们知道只要是数据表,就一定逃不掉表的增删查改操作。 该篇,我在VS2019的环境下通过demo实例来实现DataGridView控件的一系列功能,包括添加一行数据、切换允许修改单元格、复制选择数据、复制所有数据、读一行数据、读取所有数据、查找记录、删除一行数据、删除一行数据、删除多行数据、清除所有行以及清除所有列。 .........
2022-07-03 16:38:01
15224
9
原创 C# 选项卡tabControl子项tabPage的显示和隐藏
我们在使用选项卡tabControl时,很多情况需要我们隐藏或者显示出我们指定的tabPage的页面。这里用VS2019简述基本操作和代码控制。 首先在工具箱中找到容器中的TabControl。将其拖到Form界面中,可以自由添加修改控件属性。往往我们先要将,会出现的页面先全部添加好。添加和删除页面在属性的最下方——添加选项卡和删除选项卡。 &emsp我们这里利用其父子控件关系来实现最简单的控制。onoff为true时,显示该选项卡tabPage2,其父控件名称叫做tab
2022-06-20 17:46:37
18393
1
原创 C# Form 鼠标悬停Tip显示
目录 1、添加控件2、修改控件属性3、修改控制对象3、最后 为了方便和详细解释说明C# form界面的使用,想描述设置范围或者注意事项等等内容,又不想写很多文字在界面上。这时候我们就可以使用VS的ToolTip控件,就可以在鼠标放在指定控件上面的时候能弹出一个小框的文字说明小提示,这里以VS2019为例说一下它是如何添加使用的。1、添加控件 在Form界面中将左侧工具箱中拖入ToolTip控件到界面中,接着可以看到界面下方会多出一个控件叫做toolTip1的控件。2、修改控件属性
2022-04-22 14:55:04
3974
原创 C# 结构体列表的使用
目录 引言1、结构体定义2、结构体列表初始化3、结构体列表赋值4、结构体列表遍历5、结构体列表删除6、结构体列表全清除引言 我们在使用大量相同的结构体的时候,就可以使用结构体列表来实现是十分不错的选择,也就是我们说的List <struct>。我简要小结一下其使用方法。1、结构体定义 结构体定义如下。struct NR_BCH_PROP{ public long arfcn; public long center_freq;}2、结构体列表初始化
2022-04-22 11:59:50
2851
C语言描述MD5实例——MD5.c
2022-07-30
Anlink 一个很好用的投屏工具
2022-06-20
adb_tools.zip
2022-02-18
Renci.SshNet.dll动态链接库
2022-01-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅