
C#
文章平均质量分 66
C#基础知识
就是有点傻
我自飘零我自狂,犹如野鹤游四方
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
UDP读取数据
【代码】UDP读取数据。原创 2025-04-12 17:30:25 · 202 阅读 · 0 评论 -
将多个自定义协议转到Modbus同一个端口下不同的站地址下面
【代码】将多个自定义协议转到Modbus同一个端口下不同的站地址下面。原创 2025-04-12 11:36:20 · 229 阅读 · 0 评论 -
C# 看门狗策略实现
(示例中每1秒更新一次),看门狗通过检查心跳时间判断是否存活。(示例10秒)未收到心跳,判定为任务冻结,触发重启。),每次检测后重置,避免并发问题。关键字确保布尔标志的可见性。被监控的任务需定期更新。创建新线程并更新心跳时间戳。原创 2025-04-10 17:58:50 · 414 阅读 · 0 评论 -
C# 中实现 跨线程写入
若写入操作频率过高,需监控队列长度或添加背压机制。:如网络服务器,处理来自不同客户端的并发更新操作。:由独立线程处理队列中的写入操作,确保顺序执行。:确保多个线程同时触发写入时,不会导致竞态条件。:在写入操作中需捕获异常,避免导致写入线程崩溃。:采集线程持续读取数据,外部线程动态更新配置。:多个工作线程提交写入请求,由中心线程处理。接收来自任意线程的写入请求。控制读取线程的暂停与恢复。时间或使用无等待策略。原创 2025-03-24 20:02:12 · 503 阅读 · 0 评论 -
C# 中实现一个线程持续读取,另一个线程负责写入,且写入时读取线程暂停
写入线程通过Set()发送暂停请求,读取线程通过Wait()阻塞自身。:读取线程暂停后通过Set()通知写入线程,确保写入操作安全执行。原创 2025-03-24 17:55:31 · 466 阅读 · 0 评论 -
C#中如何实现读写分离
读写锁适合读多写少场景,写频繁时可能不如普通锁高效。通过每次修改生成新对象实现无锁读取(如使用。:数据库读写分离时需处理主从同步延迟问题。:独占锁,其他所有读写操作都会被阻塞。灵活性较低,仅适用于预定义的集合类型。:确保锁的获取和释放成对出现(用。适用于简单变量的读写分离,通过。需要手动管理锁的获取和释放。直接利用数据库主从复制特性。开箱即用,无需手动管理锁。高性能,适合高频读写场景。频繁修改可能产生内存压力。:允许多个线程同时读取。需要手动处理内存可见性。需要数据库支持主从同步。原创 2025-03-24 17:44:06 · 598 阅读 · 0 评论 -
C#中Interlocked.Exchange的作用
在 C# 中,是一个用于的关键方法,其核心作用是。原创 2025-03-24 16:14:54 · 416 阅读 · 0 评论 -
C#中的字典怎么使用?
如果使用自定义类型作为键,需要确保该类型正确实现了。原创 2025-02-28 10:01:30 · 571 阅读 · 0 评论 -
C# 中的Stopwatch和timer
Stopwatch:用于测量时间间隔,适合性能分析和精确计时。Timer:用于在指定的时间间隔后执行代码,适合定时任务。根据你的具体需求,可以选择使用Stopwatch来测量时间间隔,或使用Timer来执行定时任务。原创 2025-01-21 11:49:25 · 649 阅读 · 0 评论 -
使用定时器来实现倒计时
模拟工业中空压机在某一段时间内压力过大或者过小从而判断是否需要开启其他的空压机。当写入一个大于100的数字的时候不会进行倒计时。当框里面的数字小于100 时开始倒计时。原创 2025-01-06 15:38:23 · 226 阅读 · 0 评论 -
单例模式的缺点
可以通过依赖注入替代单例,以便更好地进行测试。原创 2024-12-07 10:27:29 · 765 阅读 · 0 评论 -
设计模式六大原则
一个类应该仅有一个引起它变化的原因。原创 2024-12-07 09:38:08 · 552 阅读 · 0 评论 -
使用Dapper创建一个简单的查询
【代码】使用Dapper创建一个简单的查询。原创 2024-12-06 17:04:32 · 581 阅读 · 0 评论 -
C#中的多态
(Polymorphism)是面向对象编程中的核心概念之一,它允许对象在不同的上下文中表现出不同的行为。简单来说,多态使得相同的方法调用可以表现出不同的行为,这使得代码更加灵活、可扩展和可维护。(静态多态)和(动态多态)。原创 2024-12-05 14:15:16 · 828 阅读 · 0 评论 -
常见的五种 数据绑定方式
绑定模式说明适用场景OneWay数据单向流动,数据源变化更新目标显示数据但不需要修改数据源TwoWay数据双向流动,控件和数据源同步表单、用户输入需要同步到数据源数据从目标控件流向源数据用户输入需要更新数据源但不反向更新OneTime绑定只发生一次,数据初始化时设置只需要初始化值,不需要后续更新数据单向流动,并应用转换器处理数据需要在绑定时转换数据的场景这些绑定方式可以灵活地应用于不同的场景,帮助开发者实现动态、响应式的界面。原创 2024-12-04 14:55:58 · 1057 阅读 · 0 评论 -
长连接和短连接的区别
长连接适用于需要频繁交互、实时性要求较高的场景,能有效减少连接建立和销毁的开销,适合高并发、大流量的应用。短连接更适用于低频请求、资源消耗较少的简单应用场景。原创 2024-12-03 22:00:11 · 1596 阅读 · 0 评论 -
C#中的工厂模式
简单工厂模式适合产品种类较少且变化不大的情况。工厂方法模式适用于需要解耦对象创建和客户端代码的情况,增加了灵活性和可扩展性。抽象工厂模式适合用于创建一系列相关的产品,尤其是在产品族的情况下,能够确保产品之间的一致性。原创 2024-11-30 11:10:19 · 1530 阅读 · 1 评论 -
C#中的HttpContent、HttpClientHandle、HttpWebRequest
可以被用来创建一个处理程序链,其中每个处理程序可以处理传入的请求和传出的响应。它提供了一个现代、易于使用且支持异步操作的API,是 .NET Core 和 .NET 5/6 中推荐使用的HTTP客户端。支持各种HTTP功能,包括HTTP头、HTTP方法(如GET、POST、PUT、DELETE等)、身份验证、重定向处理等。负责处理与HTTP请求和响应相关的底层细节,例如网络连接、代理、Cookie、重定向等。是 .NET 中用于发送HTTP请求和接收HTTP响应的类,属于。原创 2024-11-09 17:08:07 · 2171 阅读 · 0 评论 -
常见的Winform问题
首先,要开发一个分页控件,这个可以自已做一个,用组合控件开发方式,实现其基本的翻页功能 和分页信息呈现即可,很简单;5) 将Form2对象添加到Panel的Controls集合中 最后别忘记调用Form2的Show()方法。2.返回当页的数据列表 最后,将分页控件的总记录数属性设置为返回的总记录数;资源分配不当,一个资源每次只能被一个进程使用,一个资源请求资源时,而此时这个资源已阻塞,对已获得资源不放,进程获得资源时,未使用完前,不能强行剥夺。系统的资源不足,进程的推进的顺序不合适。(谁也无法再继续推进)原创 2024-10-22 17:19:26 · 1481 阅读 · 1 评论 -
C#中Task.ContinueWith如何使用
方法是Task类的一个成员,它允许你为一个任务添加一个延续操作。这个延续操作会在任务完成时执行,无论是成功完成、发生异常还是被取消。你可以使用这个方法来执行一些清理工作,或者基于前一个任务的结果来启动另一个任务。以下是。原创 2024-10-14 17:47:40 · 1165 阅读 · 0 评论 -
在C#中使用AES对数据进行加密解密
【代码】在C#中使用AES对数据进行加密解密。原创 2024-09-23 21:55:47 · 218 阅读 · 0 评论 -
将C#中的图片转为二进制数组,将二进制转为图片
【代码】将C#中的图片转为二进制数组,将二进制转为图片。原创 2024-09-23 21:52:57 · 248 阅读 · 0 评论 -
在C#中使用NPOI将表格中的数据导入excel中
在C#中,使用NPOI库将表格数据导入Excel的操作相对直接。NPOI是.NET版本的POI,可以帮助我们在没有安装Microsoft Office的情况下读写Office文件,如xls和xlsx。然后,我们创建一个工作表,并填充表头和数据。最后,我们将工作簿写入到指定的文件路径。:最后,将工作簿写入到文件流中,保存为Excel文件。在上述代码中,我们首先检查文件扩展名来决定创建。的每一行,并为每个单元格填充数据。对象,这是Excel文件的开始。的列来创建Excel文件的表头。:首先,你需要创建一个。原创 2024-09-23 21:48:09 · 972 阅读 · 0 评论 -
git常用的命令的
git push --set-upstream origin branch_name:设置本地的branch_name分支对应远程仓库的branch_name分支git push -d origin branch_name:删除远程仓库的branch_name分支。git branch --set-upstream-to=origin/branch_name1 branch_name2:将远程的branch_name1分支与本地的branch_name2分支对应。原创 2024-09-13 19:10:46 · 1306 阅读 · 0 评论 -
Entity Framework (EF)框架中三种主要的数据加载策略
在Entity Framework (EF)框架中,有三种主要的数据加载策略:预先加载(Eager Loading)、延迟加载(Lazy Loading)和显式加载(Explicit Loading)。每种策略都有其适用场景和优缺点。预先加载(Eager Loading)预先加载是在查询实体时,通过使用Include方法将相关联的导航属性数据一并加载。适用于需要同时访问实体及其关联数据的场景,可以减少数据库查询次数,但可能会加载不必要的数据。原创 2024-09-12 17:33:56 · 1122 阅读 · 0 评论 -
LINQ语句中groupby和lookup的区别以及skip使用方法
在某些情况下,可能需要考虑更高效的分页策略,比如使用数据库的分页功能。这种方法允许你跳过一定数量的元素,然后取出接下来的若干元素,这对于分页显示数据非常有用。:通常在分页之前对数据进行排序,这样用户在浏览不同页面时,数据的顺序是一致的。:在实际应用中,页码和每页大小通常是用户输入的,需要进行适当的验证和处理。被按照性别分组,每个组的键是性别,每个组的值是具有相同性别的人的集合。的集合,每个元素是一个包含键和分组元素集合的匿名类型或对象。类型的对象,而不是一个包含键和集合的匿名类型或对象的集合。原创 2024-09-11 19:16:55 · 642 阅读 · 0 评论 -
LINQ中的select
它通常用于从源集合中选择数据,并且可以用于投影(projection),即将源数据转换成新的形式或新的数据结构。关键字是 LINQ 查询中非常强大的一个部分,它提供了极大的灵活性来塑造查询的结果。在实际使用中,你可以根据需要选择最合适的方式来使用它。来创建新的对象实例,这在创建 DTO(Data Transfer Objects)或者需要将数据转换为不同类型时非常有用。:如果你想要返回源集合中的每个对象,可以直接使用对象的类型名作为选择的结果。:如果你只对对象的某些属性感兴趣,可以选择这些属性。原创 2024-09-11 19:12:55 · 1565 阅读 · 0 评论 -
实体模式中的代码优先
数据提供程序是一个包含用于与数据库交互的类和方法的库。它封装了与特定数据库管理系统 (DBMS) 通信所需的所有细节。每个数据库系统通常都有自己的 .NET 数据提供程序。是一个重要的配置参数,它告诉应用程序使用哪个数据提供程序来与数据库进行交互。这使得应用程序能够灵活地支持多种数据库系统,只需通过更改配置即可切换不同的数据库。原创 2024-09-11 03:30:00 · 939 阅读 · 0 评论 -
C#中的LINQ语句
LINQ(Language Integrated Query)是 .NET Framework 中的一个功能强大的查询语言,它允许开发者使用类似 SQL 的语法来查询和操作数据。在 C# 中,LINQ 可以用于查询数组、列表、集合、XML 文档、关系数据库等。这些是 LINQ 在 C# 中的一些基本用法。LINQ 提供了一种声明式编程方式,使得数据查询和操作更加直观和简洁。原创 2024-09-10 16:33:59 · 1189 阅读 · 0 评论 -
实体框架常用的特性使用
在 C# 的 Entity Framework (EF) 中,特性(Attributes)是用来提供关于实体类及其成员的元数据信息。这些特性可以控制 EF 如何将实体映射到数据库表以及如何处理实体之间的关系。用于乐观并发控制,标记属性作为数据库行的版本号。指定实体类的属性映射到数据库表中的哪个列。指定属性在数据库中对应的列不允许空值。指定某个属性不应该映射到数据库中的列。指定实体类映射到数据库中的哪个表。指定字符串属性的最大长度。指定实体间的关系的另一端。指定导航属性的外键关系。标记实体类的主键属性。原创 2024-09-10 16:29:17 · 401 阅读 · 0 评论 -
C#多线程进阶
多线程是指在单个程序中同时运行多个线程(轻量级进程)。每个线程可以独立运行,拥有自己的调用栈和局部变量。原创 2024-09-09 23:07:00 · 2572 阅读 · 0 评论 -
C#中的闭包
在 C# 中,闭包(Closure)是一种编程结构,它允许一个内部函数(也称为闭包函数)捕获和存储定义它的外部函数(也称为外部函数或父函数)的作用域中的变量。即使外部函数已经执行完毕并退出,闭包仍然可以访问这些变量。闭包在 C# 中通常通过匿名方法(Anonymous Method)或 Lambda 表达式(Lambda Expression)来实现。匿名方法和 Lambda 表达式都是没有名称的内联函数,它们可以直接在声明它们的地方定义。原创 2024-09-08 14:24:27 · 1271 阅读 · 0 评论 -
Winform中在窗体中的Paint事件中重绘会导致递归问题?
如果重绘是由计时器或其他周期性事件触发的,确保重绘的频率是合理的,避免不必要的频繁重绘。之前,检查是否有必要重绘。例如,只有当某个特定条件发生变化时才重绘。事件处理程序中妥善处理异常,避免因为异常导致的额外重绘。在 WinForms 应用程序中,如果在窗体的。来确保 UI 更新操作在正确的线程上执行。方法,确实可能会导致递归调用的问题。:只重绘变化的部分,而不是整个窗体或控件。事件处理程序中只执行必要的绘制操作。下面是一个简单的例子,展示了如何在。:使用一个布尔变量作为锁,防止在。变量用作锁,以防止在。原创 2024-09-07 16:58:04 · 558 阅读 · 0 评论 -
类加载过程中的静态成员初始化和实例成员初始化有什么区别?
静态成员(包括静态字段和静态构造函数中的代码)在类第一次被引用时初始化。:实例成员(包括字段和构造函数中的代码)在创建类的实例时初始化。:静态成员的初始化发生在类加载到应用程序域时,且只发生一次,无论创建多少个类的实例。:实例成员的生命周期与对象实例相同,对象创建时初始化,对象被垃圾回收时销毁。它们在所有对象之间共享。:静态成员可以直接在字段声明时初始化,或者在静态构造函数中初始化。:实例成员的初始化发生在对象创建时,每次创建新对象时都会发生。:实例成员可以在字段声明时初始化,或者在构造函数中初始化。原创 2024-09-06 13:56:34 · 374 阅读 · 0 评论 -
C#中的点状画刷
在C#中,创建点状(Dotted)画刷通常涉及到使用枚举来定义画笔的虚线样式。可以用于创建点状画刷,这种画刷可以用来绘制点状的线条或边框。:使用Pen类创建一个画笔对象,并设置其DashStyle属性为。:使用Graphics对象的绘图方法(如DrawLine等)绘制图形。原创 2024-09-05 21:43:52 · 591 阅读 · 0 评论 -
如何缩放C#中的img
在C#中,你可以使用命名空间中的Graphics类来缩放图像。:使用或方法加载原始图像。:创建一个新的Bitmap对象,其大小为缩放后的大小。:使用Graphics对象的DrawImage方法将原始图像绘制到新的Bitmap对象上,实现缩放。:保存或显示缩放后的图像。原创 2024-09-05 11:21:27 · 930 阅读 · 0 评论 -
C#中的两个问号
在C#中,两个问号(??)是null合并运算符(Null Coalescing Operator)的符号。这个运算符用于提供一个默认值,当左侧的操作数为null时,将返回右侧操作数的值。如果左侧的操作数不为null,则返回左侧操作数的值。原创 2024-09-04 20:52:53 · 1338 阅读 · 0 评论 -
C#中的PropertyInfo
在C#中,是一个类,属于命名空间,它提供了反射(Reflection)机制中用于获取属性信息的方法和属性。反射是一种强大的机制,允许程序在运行时检查和操作自身的结构,包括类型、方法、属性等。原创 2024-09-04 20:16:54 · 1051 阅读 · 0 评论 -
Winfrom窗体中的control中的Update、Invalidate、Refresh的区别
在Windows Forms应用程序中,Control类提供了几种方法来处理用户界面的重绘,包括UpdateInvalidate和Refresh。这些方法都与控件的绘制和刷新有关,但它们的具体行为和用途有所不同。原创 2024-09-04 15:33:51 · 718 阅读 · 0 评论 -
C#中的SetStyle
在没有双缓冲的情况下,当控件或窗体进行重绘时,每次更新都会直接绘制到屏幕上,这可能导致屏幕闪烁,尤其是在复杂或动画图形的情况下。双缓冲通过在内存中绘制图形,然后一次性将完整的图像绘制到屏幕上来解决这个问题。双缓冲通过在内存中完成所有的绘制操作,然后一次性将完整的图像显示在屏幕上,有效地减少了闪烁和图形失真。这种方法提高了用户界面的视觉效果,特别是在需要复杂或频繁更新图形的应用程序中。尽管双缓冲增加了内存的使用,但它通常提供了更好的用户体验和性能。原创 2024-09-04 15:26:03 · 1236 阅读 · 0 评论