编辑
2025-09-29
C#
00

字符串

方法名称 & 描述
**public static int Compare( string strA, string strB )**比较两个指定的 string 对象,并返回一个表示它们在排列顺序中相对位置的整数。该方法区分大小写。
**public static int Compare( string strA, string strB, bool ignoreCase )**比较两个指定的 string 对象,并返回一个表示它们在排列顺序中相对位置的整数。但是,如果布尔参数为真时,该方法不区分大小写。
**public static string Concat( string str0, string str1 )**连接两个 string 对象。
**public bool Contains( string value )**返回一个表示指定 string 对象是否出现在字符串中的值。
**public static string Copy( string str )**创建一个与指定字符串具有相同值的新的 String 对象。
**public void CopyTo( int sourceIndex, char[] destination, int destinationIndex, int count )**从 string 对象的指定位置开始复制指定数量的字符到 Unicode 字符数组中的指定位置。
**public bool EndsWith( string value )**判断 string 对象的结尾是否匹配指定的字符串。
**public bool Equals( string value )**判断当前的 string 对象是否与指定的 string 对象具有相同的值。
**public static bool Equals( string a, string b )**判断两个指定的 string 对象是否具有相同的值。
**public static string Format( string format, Object arg0 )**把指定字符串中一个或多个格式项替换为指定对象的字符串表示形式。
**public int IndexOf( char value )**返回指定 Unicode 字符在当前字符串中第一次出现的索引,索引从 0 开始。
**public int IndexOf( string value, int startIndex )**返回指定字符串从该实例中指定字符位置开始搜索第一次出现的索引,索引从 0 开始。
**public int IndexOfAny( char[] anyOf )**返回某一个指定的 Unicode 字符数组中任意字符在该实例中第一次出现的索引,索引从 0 开始。
**public int IndexOfAny( char[] anyOf, int startIndex )**返回某一个指定的 Unicode 字符数组中任意字符从该实例中指定字符位置开始搜索第一次出现的索引,索引从 0 开始。
**public string Insert( int startIndex, string value )**返回一个新的字符串,其中,指定的字符串被插入在当前 string 对象的指定索引位置。
**public static bool IsNullOrEmpty( string value )**指示指定的字符串是否为 null 或者是否为一个空的字符串。
**public static string Join( string separator, string[] value )**连接一个字符串数组中的所有元素,使用指定的分隔符分隔每个元素。
**public int LastIndexOf( char value )**返回指定 Unicode 字符在当前 string 对象中最后一次出现的索引位置,索引从 0 开始。
**public int LastIndexOf( string value )**返回指定字符串在当前 string 对象中最后一次出现的索引位置,索引从 0 开始。
**public string Remove( int startIndex )**移除当前实例中的所有字符,从指定位置开始,一直到最后一个位置为止,并返回字符串。
**public string Remove( int startIndex, int count )**从当前字符串的指定位置开始移除指定数量的字符,并返回字符串。
**public string Replace( char oldChar, char newChar )**把当前 string 对象中,所有指定的 Unicode 字符替换为另一个指定的 Unicode 字符,并返回新的字符串。
**public string Replace( string oldValue, string newValue )**把当前 string 对象中,所有指定的字符串替换为另一个指定的字符串,并返回新的字符串。
**public string[] Split( params char[] separator )**返回一个字符串数组,包含当前的 string 对象中的子字符串,子字符串是使用指定的 Unicode 字符数组中的元素进行分隔的。
**public string[] Split( char[] separator, int count )**返回一个字符串数组,包含当前的 string 对象中的子字符串,子字符串是使用指定的 Unicode 字符数组中的元素进行分隔的。int 参数指定要返回的子字符串的最大数目。
**public bool StartsWith( string value )**判断字符串实例的开头是否匹配指定的字符串。
**public char[] ToCharArray()**返回一个带有当前 string 对象中所有字符的 Unicode 字符数组。
**public char[] ToCharArray( int startIndex, int length )**返回一个带有当前 string 对象中所有字符的 Unicode 字符数组,从指定的索引开始,直到指定的长度为止。
**public string ToLower()**把字符串转换为小写并返回。
**public string ToUpper()**把字符串转换为大写并返回。
**public string Trim()**移除当前 String 对象中的所有前导空白字符和后置空白字符。
编辑
2025-09-29
C#
00

BackgroundWorker

image.png

C#
using System.ComponentModel; namespace threadexp { public partial class FrmMain : Form { //实例化BackgroundWorker private BackgroundWorker bgWorker = new BackgroundWorker(); public FrmMain() { InitializeComponent(); } private void FrmMain_Load(object sender, EventArgs e) { pbar.Maximum = 1000; //是否报告处理进度 bgWorker.WorkerReportsProgress = true; //是否允许取消操作 bgWorker.WorkerSupportsCancellation = true; //执行三个事件,DoWork事件,ProgressChanged事件以及RunWorkedCompleted事件 bgWorker.DoWork += new DoWorkEventHandler(bgWorker_DoWork); bgWorker.ProgressChanged += new ProgressChangedEventHandler(bgWorker_ProgessChanged); bgWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgWorker_WorkerCompleted); } public void bgWorker_DoWork(object sender, DoWorkEventArgs e) { //设置进度条Maximum为1000,循环1000次 for (int i = 0; i <= 1000; i++) { //获取是否取消操作 if (bgWorker.CancellationPending) { e.Cancel = true; return; } else { //报告进度 bgWorker.ReportProgress(i, "Working"); System.Threading.Thread.Sleep(10); } } } public void bgWorker_ProgessChanged(object sender, ProgressChangedEventArgs e) { //e.ProgressPercentage是获取任务int类型 pbar.Value = e.ProgressPercentage; lblTitle.Text = "处理进度:" + Convert.ToString(e.ProgressPercentage); } public void bgWorker_WorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { //若没有完全执行结束,则报错 if (e.Error != null) { MessageBox.Show(e.Error.ToString()); return; } if (!e.Cancelled) this.lblTitle.Text = "处理完毕!"; else this.lblTitle.Text = "处理终止!"; } //开始 private void btnStart_Click(object sender, EventArgs e) { //正忙时不允许继续操作 if (bgWorker.IsBusy) return; //异步开启 bgWorker.RunWorkerAsync("start"); } //停止 private void btnStop_Click(object sender, EventArgs e) { bgWorker.CancelAsync(); } } }
编辑
2025-09-29
C#
00

摘要

mciSendString 录制WAV

MCI(Media Control Interface,媒体控制接口)函数中,有些只适用于一种接口方式,有些则两种接口都可以用。mciSendString只适用于命令串接口方式(命令串中不区分大小写)。

正文

基础设置

set wave bitpersample 8 //设置为8位

set wave samplespersec 11025 //设置为11025Hz

set wave channels 2 //设置为立体声

导入winmm.dll

编辑
2025-09-29
C#
00

本文详细介绍如何使用C#创建串口监听服务,并将数据变化实时通过TCP转发到服务器。包含完整代码示例与实现思路,适合需要远程数据采集、工业设备监控的开发者参考。

在工业自动化、物联网设备管理、远程监控等应用场景中,经常需要将本地串口设备(如条码扫描枪、RFID读卡器、各类传感器)的数据实时传输到远程服务器进行处理。本文将详细讲解如何使用C#实现串口数据监听与TCP转发功能。

实现原理

我们的实现基于以下核心步骤:

  1. 创建串口监听服务,配置并打开串口
  2. 注册串口数据接收事件
  3. 当检测到串口数据变化时,通过TCP连接发送到远程服务器
  4. 实现稳定可靠的错误处理和重连机制
编辑
2025-09-29
C#
00

随着 C# 11 的发布,泛型属性(Generic Attributes)被引入到了语言中。在此之前,C# 中的属性不能有泛型类型参数,这在需要类型特定信息的某些场景中限制了它们的使用。这个新特性为开发者打开了编写更可重用、类型安全代码的大门。

应用场景

泛型属性可以用于多种场景,包括但不限于:

  • 数据注解:增强模型属性的元数据描述,例如为数据库模型指定列名和默认值。
  • 配置系统:在配置系统中,泛型属性可以用于标识特定类型的配置选项。
  • 依赖注入:标注需要注入的服务类型,提高依赖注入的类型安全性。
  • 插件和扩展系统:定义插件的元数据,如类型、版本等。
  • 自定义序列化/反序列化:在序列化和反序列化过程中,泛型属性可以提供类型特定的指令。

特点

  • 类型安全:泛型属性提供了类型参数,使得属性的使用更加安全,减少了类型转换错误的可能性。
  • 可重用性:泛型属性可以在不同类型之间重用,提高了代码的可重用性。
  • 灵活性:泛型属性可以根据不同的类型参数进行调整,提供了更大的灵活性。

示例

以下是一些使用泛型属性的示例,以及如何在 C# 11 中运行测试。