C#网络下载器
之前学习了一部分的C#基础,但是感觉会的不多,很多地方依然需要通过做一点小Demo来进行巩固,那么这个C#的网络下载器,就来了 原理讲解 首先我们编写代码之前,我们需要了解下网络下载的原理到底是什么? 学习过C#中IO流部分的知识,或者你有其它的语言的基础,学习过其它语言的文件IO的基础,肯定了解过我们计算机中的数据都是二进制,那么网络中传输的数据本质上也是一样的。我们在学习文件IO中,都会学习文件的读写操作,读操作(Output),将文件中的二进制数据读出来,写操作(Input)将内存中的二进制数据写入
【C#】【WinForm】MDI窗体
MDI窗体的相关学习使用 1、设置MDI父窗体 在属性中找到IsMdiContainer选项,设置为True 2、添加MDI子窗体,在项目中依次选择添加窗体,然后一直默认即可 添加后的项目目录(Fm1为父窗口,Fm2、Fm3为子窗口) 3、在Fm1.cs中,创建对应MDI子窗口的对象并调用显示出来1 namespace WindowsFmsApp12 {3 public partial class Fm1 : Fm4 {5 public Fm1()6 {7
[WPF]原生TabControl控件实现拖拽排序功能
在UI交互中,拖拽操作是一种非常简单友好的交互。尤其是在ListBox,TabControl,ListView这类列表控件中更为常见。通常要实现拖拽排序功能的做法是自定义控件。本文将分享一种在原生控件上设置附加属性的方式实现拖拽排序功能。 该方法的使用非常简单,仅需增加一个附加属性就行。 TabControlassist:DragAttach.IsItemsDragEnabled="True"AlternationCount="{Binding ClassInfos.Count}"ContentTempl
Net 高级调试之一:开始认识一些调试工具
一、简介 从今天开始一个长系列, 高级调试的相关文章,我自从学习了之后,以前很多模糊的地方现在很清楚了,原来自己的功力还是不够,所以有很多不明白,通过学习 高级调试,眼前豁然开朗,茅塞顿开。其实,刚开始要学习《 高级调试》,还是很是很困难的,很多工具不会用,又不知道如何调试,痛苦的又很多次想放弃,但是,最终还是坚持下来,收获也不小。 既然坚持下来了,我就把学习的过程记录下来,也许以后自己的能用的到,可以方便查询。或许,有其他人也有同样的困扰,或许可以在我这里得到一些帮助,有帮助我当然很开心。
记录EF 排序配上自定义的比较器
记录EF 排序配上自定义的比较器 前言 要求页面文件显示的时候能够按照序号去排序要求如下: 数据库有一个列存放文件名,如:1.1文件 1.2文件 1.1.1文件 1.1.11文件1.0.txt 1.1.2(文件).pdf现在需要实现查询的时候按照这个列排序,并且是按照序号排序。 查询的时候是按层级查询的,每次查询只会当前所在层,1 文件夹、2文件夹、3文件,然后进入1 文件夹 才会查询出 1.1文件..1.2文件夹,这没什么影响,主要实现的功能就是我查询的时候要排序,如果直接根据列名derBy是没用的,所
C#中的栈与队列/练习
C#栈和队列的实现 用双向链表实现一个队列 public class DoubleNode {public int Valuepublic DoubleNode prepublic DoubleNode nextpublic DoubleNode(int value){this.Value = valuethis.pre=nullthis.next=null} } public class MyQueue使用双向链表实现队列 {public DoubleNode headpublic DoubleNode
浅析 C# 控制台的 Ctrl+C 是怎么玩的
一:背景 1. 讲故事 上一篇我们聊到了 Console 为什么会卡死,读过那篇文章的朋友相信对 conhost.exe 有了一个大概的了解,这一篇更进一步聊一聊窗口的特殊事件 Ctrl+C 底层流转到底是什么样的,为了方便讲述,让 chagtgpt 给我生成一段Ctrl+C 的业务代码。class Program{static void Main(string[] args){Console.CancelKeyPress += new ConsoleCancelEventHler(CancelKeyPr
SqlSugar框架之WPF应用端功能介绍
WPF应用端是我们《SqlSugar开发框架》多端界面中的一部分,和Winfm前端框架、Vue3+ElementPlus前端、UniApp+Thn移动端,组成一个完整的整体框架,后端服务是基于SqlSugar的基础M的.ce框架,提供Web API服务供各个前端使用,底层支持多种数据库,包括SqlServer、acle、Mysql、PostgreSQL、SQLite等数据库,通过配置即可切换为其他数据库。本篇随笔介绍SqlSugar开发框架之WPF应用端功能。 WPF应用端开发基于CommunityToo
浅析 C# Console 控制台为什么也会卡死
一:背景 1. 讲故事 在分析旅程中,总会有几例控制台的意外卡死导致的生产事故,有经验的朋友都知道,控制台卡死一般是动了 快速编辑窗口 的缘故,截图如下:虽然知道缘由,但一直没有时间探究底层原理,市面上也没有对这块的底层原理介绍,昨天花了点时间简单探究了下,算是记录分享吧。 二:几个疑问解答 1. 界面为什么会卡死 相信有很多朋友会有这么一个疑问?控制台程序明明没有 message loop 机制,为什么还能响应 窗口事件 呢? 说实话这是一个好问题,其实 Console 之所以能响应 窗口事件,是因为它
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(12) -- 使用代码生成工具Database2Sharp生成WPF界面代码
在经过基于SqlSugar框架的WPF应用端系统界面及模块的不断优化和重构后,视图界面及视图模型等代码已趋稳定,因此完成前面的介绍后,现在开始统一基于代码生成工具Database2Sharp进行WPF应用端界面代码的快速生成了,代码除了和WPF应用端的基类保持一致处理外,并添加一些注释代码,整合使用一些自定义的控件,以便更好的展示和简化代码处理。本篇随笔介绍使用代码生成工具Database2Sharp生成WPF界面代码。 1、代码生成工具Database2Sharp生成WPF界面代码 WPF应用端的基础接
【算法】万圣节前夕的迷宫挑战(二)
在十月底一个阳光明媚的周末,小悦开始她的徒步旅行,一头高高的马尾轻轻摇曳,充满了青春的活力。她的笑容如同春日的阳光,温暖而明亮,总是让人心情愉悦。那天的徒步旅行,她选择了一条山区路线,期望能欣赏到秋天那五彩斑斓的树叶和感受大自然的魅力。 旅途中,小悦遇到了一些意料之外的障碍。她发现自己的体力迅速流失,山路比她想象的要陡峭得多。每走一步,她都需要调整自己的步伐和呼吸,以更好地应对挑战。面对这些困难,她知道,除了身体的锻炼,还有心态的调整。为了继续前行,她需要保持积极乐观的态度。 小悦继续她的徒步旅行,欣赏着
WPF 已知问题 RadioButton 指定 GroupName 后关闭窗口可能导致无法选中
本文记录一个 WPF 已知问题,当 WPF 的 RadioButton 指定 GroupName 且将 IsChecked 状态绑定到 ViewModel 上,将包含以上控件的代码的窗口显示两个,接着关闭其中一个。此时可以看到依然开着的窗口的 RadioButton 控件无法正确在用户界面上点击选中此问题已经报告给 WPF 官方,请看 https:github.comdotwpfissues2995 最小复现代码:https:github.comwalterlvWalterlv.Issues.RadioB
如何写正则表达式
正则表达式是一种用来匹配字符串的规则。每个字符在正则表达式中都有其特定的含义,下面是一些常见的字符及其含义: 1. ^:匹配字符串的开头位置。 2. $:匹配字符串的结尾位置。 3. .:匹配任意单个字符。 4. :匹配0个或多个前面的字符。5. +:匹配1个或多个前面的字符。 6. :匹配0个或1个前面的字符。 7. []:匹配方括号中的任意一个字符。8. [^]:匹配不在方括号中的任意一个字符。 9. ():将括号中的内容作为一个分组,可以在后面引用。10. |:表示或的关系,可以匹配多
aspnetcore微服务之间grpc通信,无proto文件
aspce微服务之间通信grpc,一般服务对外接口用restful架构,HTTP请求,服务之间的通信grpc多走内网。 以前写过一篇grpc和web前端之间的通讯,代码如下: exercisebookgrpcgrpcweb at main · liuzhixin405exercisebook (github.com) 本次是微服务之间的通信使用了开源软件MagicOnion该软件定义接口约束免去proto复杂配置,类似leans或者webservice,服务调用都通过约定接口规范做传输调用,使用起来非
它让你1小时精通RabbitMQ消息队列、且能扛高并发
支持. Ce(2.0及以上)与. Framewk(4.5及以上) 本文所述方案近期被江苏省某亿级数据量+高并发的政府"物联网"项目采用,获得圆满成功!! 【目录】发送消息、获取消息、使用消息延时队列 & 死信队列展望RabbitMQ作为一款主流的消息队列工具早已广受欢迎。相比于其它的MQ工具,RabbitMQ支持的语言更多、功能更完善。 1.发送消息、获取消息、使用消息 本文提供一种市面上最极简单的使用RabbitMQ的方式,只需要会调用以下三个方法,你就几乎可以掌握整个RabbitMQ的使用: (1)
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(11) -- 下拉列表的数据绑定以及自定义系统字典列表控件
在我们开发的前端项目中,往往为了方便,都需对一些控件进行自定义的处理,以便实现快速的数据绑定以及便捷的使用,本篇随笔介绍通过抽取常见字典列表,实现通用的字典类型绑定;以及通过自定义控件的属性处理,实现系统字典内容的快捷绑定的操作。 1、下拉列表的数据绑定 在我们创建下拉列表的时候,我们一般处理方式,是在对应的数据模型中添加对应的下拉列表的集合对象,然后在控件绑定对应的ItemSource,如下所示是视图模型,我们增加一个性别的列表参考。 summary 用户列表视图模型对象 summary publi
IL编织器 --- Fody
介绍这个项目的名称“Fody”来源于属于织巢鸟科(Ploceidae)的小鸟(Fody),本身意义为编织。 核心Fody引擎的代码库地址 :https:github.comFodyFodyGithub上是这样介绍的: Fody 是一个用于织制 . 程序集的可扩展工具。它允许在构建过程中作为一部分来操纵程序集的中间语言(IL),这需要大量的底层代码编写。这些底层代码需要了解 MSBuild 和 Visual Studio 的 API。Fody 通过可扩展的插件模型试图消除这些底层代码。这种技术非常强大,例如
db-cdc之mysql 深入了解并使用binlog
1.什么是binlog? 2.binlog可以用来干什么? 3.怎么样使用binlog binlog是记录所有数据库表结构变更(例如CREATE、ALTER TABLE…)以及表数据修改(、 UPDATE、…)的二进制日志。实际落库产生的日志(事务提交后)。 我们先看一下Mysql数据更新的流程: binlog可以干什么? • 通过如上所述,我们知道binlog是mysql的已提交日志,是实际落库的,那么如果可以监听到binlog那么我们可以用来处理DB主从同步,跨库同步,数据备份,同步ES,缓存刷
vs发生生成错误怎么解决
在 Visual Studio(VS)中,生成错误(build err)通常表示代码中存在一些问题,导致编译器无法正确编译代码。以下是一些常见的原因和解决方法:语法错误:这是最常见的错误类型,包括拼写错误、缺失的分号、括号不匹配等。检查代码中的语法错误,并尝试修复它们。 引用错误:如果您引用了不存在的库或命名空间,或者引用的库版本不正确,可能会导致生成错误。请检查代码中的引用是否正确,并确保所有引用的库和命名空间都已正确声明。 编译选项错误:如果您在编译代码时选择了错误的编译选项,可能会导致生成错误。请检
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(10) -- 在DataGrid上直接编辑保存数据
有时候,一些数据的录入可能需要使用表格直接录入会显得更加方便快捷,这种情况有时候也是由于客户使用习惯而提出,本篇随笔介绍在WPF应用端上使用DataGrid来直接新增、编辑、保存数据的处理。 录入数据的时候,我们都采用在一个窗体界面中,根据不同内容进行录入,但是有时候涉及主从表的数据录入,从表的数据有时候为了录入方便,也会通过表格控件直接录入。在Winfm开发的时候,我们很多时候可以利用表格GridControl控件来直接录入数据;在BS的Vue&Elment前端项目中,也可以利用第三方组件vxetabl
WPF性能优化:Freezable 对象
Freezable是WPF中一个特殊的基类,用于创建可以冻结(Freeze)的可变对象。冻结一个对象意味着将其状态设置为只读,从而提高性能并允许在多线程环境中共享对象。 Freezable的应用 我们定义画刷资源的时候常常会这样写: SolidColBrush x:Key="RedBrush" Col="Red" o:Freeze="True"代码中的o:Freeze="True"其实就是使用Freezable的 Freeze方法冻结画刷,使之不可修改,系统不必监视该画刷对象,从而减少资源消耗。o:Fre
原生js实现下拉框可输入
js实现下拉框可输入 前言 众所周知,html默认的下拉框是无法输入值的,然后最新的办法是用datalist和输入框绑定,但是很多浏览器不支持。然后还有很多框架提供的下拉框都是可输入的。但是公司的项目太老了,考虑到依赖性需要使用原生js去实现。 业务是这样,现在有一个输入框存在,需要在不改变这个输入框id的情况下让这个输入框能实现下拉框的效果。 代码实现 Js代码 我编写了一个函数用于接收元素id和下拉框的列表数据,函数内部需要完成下拉框的创建。 首先获取需要变成下拉框的输入框id,然后创建ul元素,然后
利用OpenXML获取Excel单元格背景色
利用OpenXML获取Excel单元格背景色 最近项目上遇到了关于Excel获取处理的问题,关于Excel单元格背景色的获取,水的文章都大同小异,都没注意到Excel单元格背景色是怎么赋值,这会导致出现有些背景色无法获取的情况。(PS:其实应该叫做前景色) 关于这点我们可以先来看一下,一个Excel文档的内部有关背景色样式代码。 Excel背景色样式解析这是一个样例Excel,我们给它赋上了一些背景色样式,如下图所示。但是在Excel的style.xml文件中,这些颜色的表现形式不尽相同。fillpatt
字符串 --- 不可变性与驻留池
引言 面试中,常会问道,在大数据量的字符串拼接情况,为什么 StringBuilder 性能比直接字符串拼接更好? 主要原因就是 string 是不可变类型,每次操作都会创建新的字符串对象,频繁操作会导致内存频繁的分配和回收,就会降低性能, 而 StringBuilder 是可变类型,它允许对字符串进行原地修改,无需每次都创建新对象,其内部使用一个缓冲区来存储字符,可以高效地执行字符串操作,如添加、插入、删除等。 面试题就不多说了,既然这里已经提到了字符串性能,那我们来说一说保证字符串的性能、内存效率和安
c# Queue 队列的基本使用
C# 中的 Queue 是一种基于链表的先进先出 (FIFO) 数据结构。以下是一个简单的 Queue 实例: summary 普通队列 summarypublic void QueueShow() { 创建一个QueueQueuestring queue = new Queuestring() 添加元素到队列中queue.Enqueue("Apple")queue.Enqueue("Banana")queue.Enqueue("ange") 获取队列中的元素数量int count = queue.Cou
C# 实现MD5加密
C#MD5加密日常程序开发中,涉及到敏感数据内容,通常会采取加密处理以保证数据安全,本篇文章讲述了在C#中使用MD5方法加密数据MD5介绍 MD5的全称是messagedigest algithm 5,MD5算法属于hash算法的一类,对消息进行运算,产生一个128位的消息摘要(32位数字字母),并且加密不可逆,相同数据的加密结果一定相同。 特点任意长度的数据,算出的MD5值都是固定的长度 计算容易 无论对原来的数据进行多细小的改动,所得到的MD5都有很大差别 弱抗碰撞:已知原数据和其MD5值,想找到一个
【算法】万圣节前夕的迷宫挑战
这一天阳光和煦,小悦将捣蛋的侄子小明送回家后,紧绷的神经终于得以放松。在过去的一周里,小悦以无比的耐心和细心照顾着小明,同时也不忘在编程的道路上引领他迈出第一步。 万圣节前夕的一天,书房中的陈设在阳光下显得庄重而温暖,小悦正专心致志地处理着手头的工作。突然,一封邮件如不速之客般打破了这份宁静。邮件标题简短,仅以“随机迷宫最短路径”几个字概括,而内容更像是一个简单的图像附件,几个由字符“W”和“.”组成的3x3或6x6网格。这个迷宫的难题在于,迷宫的面积是不固定的,并且一旦走到边缘,就会被迫停滞不前。 小悦
请不要再用整数ID值插入数据库
数据库设计在现代应用程序中不仅要满足数据完整性和性能需求,还需要考虑安全性。本文将讨论如何同时提高数据库的安全性和数据检索性能,以满足现代应用的需求。 数据安全性的挑战 整数 ID 的安全性问题 在传统数据库设计中,使用整数 ID 作为主键可能存在安全风险,因为它们很容易被猜测。这可能导致未经授权的数据访问和隐私泄漏。为了增强安全性,我们需要考虑替代方案。 替代方案:UUID 和加密UUID(通用唯一标识符):UUID 是全局唯一的标识符,难以猜测,因此提高了数据的安全性。它可以用作主键,并且还可以与加密
C#学习笔记--数据结构、泛型、委托事件等进阶知识点
C#进阶 简单数据结构类 ArrayList 元素类型以Object类型存储,支持增删查改的数组容器。 因而存在装箱拆箱操作,谨慎使用。 ArrayList ArrayList array=new ArrayList() 增================= array.Add("Hello") array.Add(true) array.Add("Tony")添加单个元素 array.Add("Hello") array.Add("Wld")ArrayList array2=new ArrayList(
orchard core 搭建cms 加载其他模块的管理1
有一个具体的例子 :https:github.comdCMSdCe.Samples 1、先使用教程,安装cms 可以是完全 也可以是采用前后端分离管理。 修改对应的program.cs 的内容: `var builder = WebApplication.CreateBuilder(args) Add services to the container. builder.Services.AddRazPages() builder.Services.AdddCe() 这是为了 识别其他模块的mvc路径