- 博客(67)
- 收藏
- 关注
原创 C#-UI线程的切换与后台线程的使用
本文主要介绍了在WinForms和WPF应用程序中如何切换至UI线程以及后台线程的使用方法。在WinForms中,通过控件的Invoke或BeginInvoke方法实现UI线程的同步或异步切换;在WPF中,则使用Application.Current.Dispatcher.Invoke或BeginInvoke方法。文章还提供了具体的代码示例,展示了如何在后台线程中执行耗时操作后更新UI.....
2025-05-16 17:11:38
760
原创 使用泛型加载&保存数据
本文详细介绍了在C#中如何实现数据的加载和保存功能。通过LoadData方法,可以从指定路径加载JSON格式的数据,并将其反序列化为指定类型的对象;如果文件不存在,则返回null。SaveData方法则用于将对象序列化为JSON格式并保存到指定路径。这两个方法都依赖于JsonConvert类进行JSON的序列化和反序列化操作,确保数据的正确读写。代码示例展示了如何实现这些功能,并提供了异常处理机制,以应对可能出现的错误。
2025-05-14 16:05:29
238
原创 读取.ini后缀类型的马达配置文件并进行赋值
本文展示了一个Test.ini配置文件的示例,并提供了读取该文件并将其转化为字典形式的C#代码。配置文件包含多个轴(ParaAxis0、ParaAxis1、ParaAxis2)和线性参数(ParaLiner0、ParaLiner1等)的配置项,如脉冲当量、速度、加速度等。代码通过读取文件内容,解析节标题和键值对,将其存储为字典结构。此外,文章还提到可以根据需求创建轴配置参数类,利用反射获取属性名称,并从配置文件中查找相应的值进行赋值。
2025-05-12 18:04:13
202
原创 同步、异步、并发的区别
本文介绍了同步、异步和并发三种编程模式的基本概念及其代码示例。同步操作是阻塞式的,调用方需等待被调用方完成操作后才能继续执行后续代码,如按顺序执行打开冰箱门、放入大象、关上冰箱门的操作。异步操作则是非阻塞式的,调用方在发起操作后可以继续执行其他任务,待被调用方完成操作后通过回调等方式通知调用方,如淘宝购物下单后等待快递通知。并发指多个任务在同一时间段内同时进行,可能是交替或并行执行,如课堂上学生同时进行不同活动。通过代码示例,展示了如何在C#中实现这些模式,并总结了它们的特点:同步强调顺序执行,异步允许任务
2025-05-10 11:19:33
294
原创 WPF-遵循MVVM框架创建图表的显示【保姆级】
使用WPF、MVVM、WPF开发框架Caliburn.Micro、开源的数据可视化库ScottPlot.WPF,进行图表的创建。保姆级。
2025-04-27 17:34:20
1002
原创 C#-利用反射自动绑定请求标志类和具体执行命令类
需求:将指定的两种类型的类进行绑定,记录到对应的字典中。思路:使用反射,获取指定命名空间下,所有的请求类,判定其是否符合条件,如果符合条件,就寻找对应命名空间中是否存在相应的执行类,将其添加入[请求&命令执行]字典中,用做后续命令执行的分发。
2024-11-22 11:56:38
517
原创 C#-异步查询示例,可实现计时器功能
该例程可替代计时器进行连续性的间隔获取状态或需要长时间循环执行的方法。使用System.Threading下的CancellationTokenSource类,进行异步操作的取消。它与 CancellationToken 配合使用,允许代码在操作不再需要继续执行时请求停止操作。
2024-11-08 16:01:02
376
原创 C#-日志系统的创建&最小输出等级的设置
C#-日志系统的创建&最小输出等级的设置,使用第三方库 Serilog、Serilog.Sinks.File、Serilog.Formatting.Compact 进行创建。
2024-09-20 14:50:25
602
原创 C#-Json文件的读写
本文介绍了如何在C#中使用Newtonsoft.Json库进行JSON文件的读取和写入操作。首先,通过using Newtonsoft.Json;引入命名空间。读取JSON的核心代码使用JsonSerializer的Deserialize方法,将文件内容反序列化为指定类型。示例代码展示了如何从文件中加载字典数据,并处理文件不存在或解析错误的情况。写入JSON的核心代码则使用JsonConvert.SerializeObject方法将对象序列化为JSON字符串,并通过File.WriteAllText写入文件
2024-06-18 13:47:09
716
原创 C#-懒汉单例创建
懒汉单例的创建模式,需要创建的单例直接继承该类即可。本文介绍了一种懒汉单例模式的实现方法,通过C#代码展示了如何创建一个抽象基类SingletonBase<T>,使得任何需要单例模式的类只需继承该类即可。该模式利用Lazy<T>来延迟实例化,确保单例对象在首次访问时才被创建。通过反射机制,CreateInstanceOfT方法能够调用私有构造函数来生成实例。这种设计简化了单例模式的实现,同时保证了线程安全和延迟加载的特性。
2024-06-15 17:58:15
329
2
原创 C#-系统Timer会自动停止,使用线程进行连续性测试
C#中System.Threading.Timer的使用。利用周末时间测试了一下System.Threading.Timer的性能,发现两个问题:1、会出现一些内存泄露的问题,第一天晚上出现了Out of memory的异常,由于是深夜没有第一时间看到线程,早上发现的时候已经中止了,所以还无法完全断定是因为Timer的原因,但后续测试了一下,在跑几个小时后,timer还是会容易出现一些内存泄露的问题,当然我是在里面进行了一些逻辑处理、页面UI的展示和硬件设备的调用;
2024-05-27 09:39:22
1172
原创 C#-根据日志等级进行日志的过滤输出
方便后期对软件进行维护,需要在一些关键处添加log日志输出,但时间长了之后会比较占用磁盘的内存;由于Log定义了不同的等级,因此可以根据等级来控制Log的具体磁盘写入。主要通过【Serilog.Core.LoggingLevelSwitch】来控制日志的输出,前提是日志写入也是用该命名空间下的ILog进行写入。
2024-05-24 01:00:00
377
原创 C#中System.Threading.Timer的使用
本文着重于System.Threading.Timer的简单使用方法。由于在实际开发过程中,原先使用的是System.Timers.Timer这个计时器,但在运行一段时间后,发现其会被GC自动回收掉;拜读过一些大佬的文章后,比较下来认为System.Threading.Timer 的性能会更安全一些,故此使用System.Threading.Timer 来进行疲劳方面的测试。实测下来,System.Threading.Timer仍旧会在运行一段时间后,被系统回收掉,如果需要连续性较长的测试,建议使用线程
2024-05-23 09:53:30
976
原创 wpf非应用程序项目【类库、用户控件库】中使用HandyControl
wpf应用程序中,在入口项目中存在App.xaml文件,在这个文件中加上对各个项目的引用,因此设计器可获取当前项目引用的XAML资源字典。由于非应用程序项目中没有App.xaml.cs文件,因此在对单个XAML文件开发时无法使用资源文件;若是对每个XAML控件都引用相同的资源,此时虽然可以运行,但重复创建的资源会对性能有影响。
2024-03-28 15:04:13
1036
原创 winform-TreeView的添加节点&展开所有节点
文章介绍了如何在C#中使用TreeView控件进行节点的添加和展开操作。首先,通过TreeView.Nodes.Add()方法可以动态添加节点,示例代码展示了如何遍历数据并逐层添加节点。其次,使用TreeView.ExpandAll()方法可以展开所有节点,确保在动态创建节点后调用该方法以展示完整结构。文章强调了在动态创建节点时,ExpandAll()应在节点创建完成后调用,以确保所有节点都能正确展开。
2024-01-16 00:45:00
1037
原创 Ado.Net 使用【连接池】进行程序优化
连接池是一种优化数据库连接性能的技术,它通过预先建立并维护一定数量的数据库连接,减少每次连接数据库时的开销。连接池中的连接可以被重复使用,当应用程序需要连接数据库时,会从池中获取一个空闲连接,使用完毕后将其释放回池中,而不是关闭连接。连接池可以根据连接字符串等标识进行分类,确保不同类型的连接不会混淆。连接池管理器负责分配连接、移除无效连接以及回收使用完毕的连接,确保连接池的高效运行。通过使用连接池,应用程序的性能得到了显著提升,尤其是在高并发场景下。
2024-01-15 00:15:00
579
原创 封装数据访问通用类DbHelper
数据交互:增上改查相同的事情:连接T-SQL命令,Command执行命令,选择执行方式得到相应结果关闭连接将一些从重复的逻辑进行封装,达到通用的目的提高复用率,提高效果,不在考虑交互过程,逻辑清晰。
2024-01-13 01:00:00
534
原创 C#-sort()利用委托自定义排序
使用委托自定义Sort()方法,实现排序例子:演示的是对链表的排序力扣算法中等题:147、对链表进行插入排序的非标准解法。
2024-01-10 20:31:06
675
原创 wpf-动态设置组件【按钮为例】样式
利用Binding 将vm中的属性作为Converter的传参实现动态样式功能。创建一个Converter,返回对应的style实现对应的修改。创建一个Converter根据传参,返回相应的样式。将创建的样式与Converter的属性绑定。
2023-12-29 12:43:05
1081
原创 wpf-MVVM绑定时可能出现的内存泄漏问题
但很多时候,很容易出现 View上直接引用Model数据的情况;当这种情况发生时,WPF将创建静态变量绑定源(即ViewModel)的强引用,导致内存泄漏。是否调用Propertychanged实际上不重要,重要是该类是从INotifyPropertyChanged派生的,因为这回告诉WPF不要创建强引用。此时,由于 view上绑定的数据 是直接到 model 上获取的,因此会造成内存泄漏的问题。在Xmal文件不变动的情况下;会极大的破坏mvvm结构,在功能较小时,可以试用。
2023-12-22 17:12:41
1055
1
原创 实践小记——C#格式化小数输出
通过上述结果可以表明;格式化小数的方式为【小数.ToString(整数位数.小数位数)】其中,整数会全部显示;小数会根据设置的位数进行 四舍五入 的取舍。
2023-11-17 17:42:23
568
原创 实践小记—静态成员的使用注意(或许由此产生的不知名Bug)
或许,看到这里会觉得说了许多废话,但在是实际生产中,是多人协作的方式比如,你需要完成的某个需求,是建立在前人已经完成一定功能的基础上,而前人并未考虑到该成员变量后续还需要做出更改,或者原定需求就不需要更改,因此为了代码顺手定义为static;而你在后续的开发中,使用到了这个成员,却并没有注意到你修改了该成员的引用实例,那么整个程序将会出现一些诡异的Bug。
2023-10-23 18:22:55
482
原创 GitHub—克隆代码出现Please make sure you have the correct access rights and the repository exists.
若是想拉取Private访问权限的代码,即需要在提供代码的GitHub中,创建并添加需要拉取代码计算机上的密钥。打开本机【C:\Users(本机的用户名).ssh】目录下,查看是否存在【id_rsa】文件,带pub的为公钥,不带的为私钥,我们用公钥即可。打开【Git Bash】输入指令【ssh-keygen】创建密钥(下图密钥已存在,但打开后内容为空,故重新创建)将粘贴的公钥内容复制进来,并给其命名,确认无误后,点击【Add SSH key】即可。打开创建完成后的公钥,并复制其中的所有内容。
2023-10-21 17:32:19
482
原创 GitHub-使用 Git工具 创建密钥id_rsa.pub
选择【New SSH key】,并将公钥【id_rsa.pub】中的内容复制其中,点击【Add SSH key】即可完成;】,点击自己的头像后选择【Settings】;跳转到Settings界面后,选择【SSH and GPG keys】选项。使用vs code 或者 记事本 打开公钥文件【id_rsa.pub】,并复制其中的所有内容;打开命令行中所示的文件路径【C:\Users\Luck.ssh】;如图所示出现了两个新建文件。私钥【id_rsa】和公钥【id_rsa.pub】打开Git Bash 工具。
2023-10-18 18:52:16
3337
原创 Git——解决 TortoiseGit 提示 No supported authentication methods available 错误
git 推送(push)后提示No supported authentication methods available 错误。此处是默认的安装路径,可做参考,具体的根据当时的安装目录找到usr\bin 下的 ssh.exe 文件选择后保存即可。找到Git的安装文件夹usr\bin 下的 ssh.exe 文件,选择并打开,之后保存设置即可。打开git设置界面后,选择 【Network -> Browse…项目文件夹下,右击如图选择【TortoiseGit -> Settings】
2023-10-18 18:26:15
2181
原创 C#-抽象类与接口
抽象类和接口这两种类型用于完全不同的目的。抽象类主要用作对象的基类,贡献某些主要的特性,例如共同的目的和结构。接口则主要是用于类,为这些类去添加不同的方法(行为)。
2023-08-31 17:34:10
3509
原创 C#-单例模式
总结来说:单例 就是**只有 一个**实例对象。模式 说的是设计模式,这是众多编程大佬、前辈们在实践过程中为了使程序更加的优美、执行效率更高等等等(具体参考 设计模式的六大原则)而创立出来的一些常用的解决方法(解决思路)。
2023-08-31 15:24:44
783
原创 数据库事务介绍与使用示例
将一组操作绑定成一个操作来执行;要么全部执行成功后提交结果——Commit transaction;要么有一个操作出现失败,就全部失败,回滚操作——Rollback transaction;
2023-07-19 18:58:29
103
原创 数据库存储过程
用户自己为了实现特定功能创建的。可以传入参数,也可以有返回值,表名存储过程是否执行成功。里面可以只有一个操作,也可以包括多个操作。执行:execute/exec 存储过程名 参数列表(多个参数,以逗号隔开)
2023-07-19 18:45:04
221
原创 数据库视图介绍
被具体化的视图,创建了索引,显著提高了查询性能,聚合了很多行的查询;虚拟表,由一个或多个表通过查询而生成的结果集;将查询定义保存起来,实际不包括数据。一台或多台服务器水平连接一组成员表的分区数据。不适用于 数据经常更新的基本数据集。存储的是查询定义,没有存储数据。视图是虚拟的,不包含数据,存储的是查询语句;简化了查询,增加了数据的保密性、数据的安全性。没有提高查询速度,只是简化了查询;(索引视图除外,因为被具体化了)表是存储数据的地方;
2023-07-19 17:17:44
155
原创 SqlDataAdapter介绍与创建
Fill()填充到 DataSet中,UpDate() 更改提交到数据库,使数据保持一致。SelectCommand 查询记录,设置或生成一个对象SqlCommand。SqlDataAdapter 对数据的操作也是建立在SqlCommand基础之上的。适配器(桥接器),DataSet 数据之间用于检索和保存数据的桥梁;带参数,添加参数,操作SqlCommand 选择第一、第二种。如果使T-SQL查询语句,选择第三种。
2023-07-18 20:21:49
883
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人