C#
爱吃奶酪的松鼠丶
QQ:1301001603
展开
-
C#拼夕夕自动化登录,电商网页自动化操作。WebView2
单纯靠WebView2是没办法通过JS实现自动登录操作的,包括浏览器插件,都不行,因为大公司对反爬机制控制的还是挺严格。下面是实现效果,私信我,咨询解决方案。原创 2023-12-02 21:46:04 · 994 阅读 · 0 评论 -
C#之抽象abstract,密封类和密封成员sealed
派生类(子)转基类(父),叫向上转型,为隐式。抽象是一种概念,一种设计方式的集中体现。基类(父)转派生类(子),叫向下转型。性能提升,可以忽略不计。原创 2023-03-08 16:38:07 · 91 阅读 · 0 评论 -
C#之多态的简单使用`virtual`,`override`用法。
假如有个图形类为基类,有个绘制功能。现在来了个方形和圆形,都继承于图形基类。这样大家都有了基类的绘制功能。这个时候圆形对应需要绘制圆形图案,方形需要绘制方形。这时候就需要用到多态了,即:同一个行为具有多个不同表现形式或形态的能力。多态是同一个行为具有多个不同表现形式或形态的能力。虚方法和重写对应的关键字分别为。这样就实现了一个简单的多态。原创 2023-03-08 15:03:20 · 220 阅读 · 0 评论 -
C#之索引Index和范围Range的使用。
比如我们想获得数组中的倒数第一个元素。我们可以通过C#内置函数。假如你想返回前3个元素。那么可以使用Range,比如。返回倒数第二个元素就直接。简单介绍下索引和范围的简单使用。索引的简单定义:如类索引。原创 2023-03-06 17:25:47 · 584 阅读 · 0 评论 -
C#实现全盘扫描,找到符合要求的文件,并把路径写入到TXT中
最近领导安排了个任务,让把服务器上符合要求的文件的路径找出来。windos自带的搜索功能太慢了,everything不想下载,想着自己实现一个,实现完成发现速度也不是很慢。第二步,遍历文件,这个一看就是费脑力的活,自己写估计效率很低,这个直接网上参考了国外大佬实现的类,直接用就行了。下面贴出具体实现代码,代码有注释。的类,可以获取到所有驱动器相关的信息。好了,今天文章已水完~希望大家有收获。1.先把电脑中的所有驱动器名称拿到。好久没更新文章了,来水一篇。3.符合要求的文件写入文本。2.遍历启动器中的文件。原创 2022-12-02 15:10:41 · 2875 阅读 · 3 评论 -
Windows核心编程篇——Hook编程(钩子编程)(C#版)
应用程序有自己的截获方式,那么操作系统呢,也有自己的截获方式,那就是使用钩子技术。(这里以windows系统为例)原创 2022-10-12 19:14:16 · 2638 阅读 · 0 评论 -
C# 获取鼠标选中的文字(屏幕取词)
本来想做鼠标选中翻译小软件,但发现鼠标选取文字获取并不是很容易,经过不断努力,最终实现。原创 2022-10-11 12:35:59 · 2614 阅读 · 0 评论 -
操作系统之信号量(Semaphore)以及再C#中的应用,通过信号量实现资源共享,互斥锁,和线程同步操作。
信号量(Semaphore) 是一种比互斥锁更强大的同步工具,它可以提供更高级的方法来同步并发进程或线程。它本质上是一个类型的整数,。而信号量的原子操作,一般就2个一个是表示test另一个是表示增加,简单点理解就是P内部执行等待和测试操作,V内部代码执行添加操作。可以通过信号量控制线程的并发同步操作,并且也可以通过信号量解决互斥锁的问题。下面将通过简单的例子分别介绍当信号量初始化值为0 OR >1 OR .........原创 2022-06-09 18:07:53 · 2615 阅读 · 0 评论 -
.net core Unable to cast object of type ‘System.DBNull‘ to type ‘System.DateTime‘.解决方案
一,如何出现的该问题使用EF core做模型渲染展示的时候,突然报错Unable to cast object of type 'System.DBNull' to type 'System.DateTime'.重字面上来看,就是类型转换错误。二,解决方案像这类问题理所当然的就去找了模型中对应的DateTime类型的属性。结果去数据库检查发现,该类型的都全部赋值,不应该报错呀。然后又仔细检查了一遍模型,还真发现端倪,因为EF core在加载模型的时候,如果使用的懒加载,他会把模型中关联的外键数据一起加原创 2022-04-27 14:02:59 · 2731 阅读 · 0 评论 -
C#多线去对数据库进行添加操作,ManualResetEvent报The number of WaitHandles must be less than or equal to 64解决方案
今天做项目有个需求,就是添加添加10万条数据到数据库,或者更多,然后为了能提高效率,很当然的想到了多线程操作。问题但是,我们通过foreach去开辟线程的时候,该如何去判断所有线程都执行完了呢?解决:这里网上找了些资料最后决定用ManualResetEvent这个类去实现对线程的控制,大概内容就是通过这个类 给每个独立的线程添加一个信号量,可以添加到线程代码的最后,通过Set()去设置,如果被标记,就代表这个线程执行完毕了。具体ManualResetEvent用法可以参考这篇文章ManualRese原创 2022-04-19 16:32:31 · 830 阅读 · 0 评论 -
blazor树形菜单通过动态渲染后,进行图标的显示和隐藏操作。
最开始想复杂了想着通过获取HTML元素的ID进行图标的显隐操作,最后发现Blazor好像无法获取HTML元素,要么就是通过JS比较麻烦。最后问了下大佬,就用了一下三元运算符 就解决了。应用场景单击树形菜单的某个节点,使选中的节点显示后面的图标。未选中的节点不显示。如下图:直接上代码: foreach (var item in TreeItems) { item.Template = (RenderTreeBuilder __builder原创 2022-04-15 09:31:23 · 781 阅读 · 0 评论 -
C#实现全局通信。
有时候在开发过程中,框架提供的通信机制可能无法满足我们的要求,这时候我们自己可以定义一个全局的事件注册器,类似于观察者模式,下面直接上代码。 public static class EventDispatcher { private static Dictionary<string, Action<object>> _actions; static EventDispatcher() { _actio原创 2022-04-13 16:55:04 · 512 阅读 · 0 评论 -
C#二分查找
网上看了很多计算二分查找的一个中间索引的一个计算 基本都是 中间索引=(左值+右值)/ 2 这种方式进行计算,这种方式其实是有个小Bug的,就是当数值很大的时候会有可能照成数值溢出。因为数值相加容易溢出,正确的应该是相减然后加一个最小量来计算 中间索引=左索引 +(右索引-左索引)/ 2 这样可以很好的解决溢出问题,相比较加法而言。好了,二分查找原理网上很多,就不赘述了。我就直接贴我代码,方便日后使用。using System;using System.Collections.Generic;us原创 2022-03-19 16:23:43 · 991 阅读 · 0 评论 -
C#特性Attribute用个简单的Dome理解
C#特性Attribute官网接下来通过自定义邮箱特性,简单看看特性用法,特性用途很多,如用作过滤器的筛选,权限验证等,接下来直接看代码。首先定义一个学生类using MyAttribute.NewAttributes;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace MyAttribute{原创 2022-02-27 16:01:50 · 131 阅读 · 0 评论 -
C#反射用法合集Reflection
本文只介绍使用方式,不介绍理论基础。理论和详细教程请直接看官网测试类using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using static System.Console;namespace SqlDB{ public class ReflectionTest { private Re原创 2022-02-26 23:14:50 · 425 阅读 · 0 评论 -
C#编写通用的泛型枚举类型,获取DisplayAttribute描述
直接上代码,通过反射获取。using BootstrapBlazor.Components;using System;using System.Collections.Generic;using System.ComponentModel;using System.ComponentModel.DataAnnotations;using System.Linq;using System.Reflection;using System.Text;using System.Threading.原创 2022-02-25 11:16:23 · 894 阅读 · 0 评论 -
C#委托实例,+=,-=以及Null的处理。
例子:定义一个枚举,进行日志筛选 public enum Severity { Verbose, Trace, Information, Warning, Error, Critical }把错误消息输出到控制台,并记录到txt文本。 这里采用+=的形式,进行委托注册。委托内注册方法 static void Main(string[] args) {原创 2022-01-06 10:26:05 · 1373 阅读 · 0 评论 -
C# Event事件的用法。
针对于Broadcaster类型里面的代码,PriceChanged就相当于是委托。例子:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 事件event{ public delegate void PriceChangedHandler(decimal oldPric...原创 2021-11-01 22:58:55 · 565 阅读 · 0 评论 -
C#进行简单的词频统计
代码如下:using System;using System.Collections;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text;using System.Text.RegularExpressions;using System.Threading.Tasks;namespace 泛型{ class Program {原创 2021-10-17 17:04:09 · 1130 阅读 · 0 评论 -
JS中的垃圾回收机制。GC
垃圾回收(GC)就像人生活的时间长了会产生垃圾一样程运行过程中也会产生垃圾这些垃圾和攒过多以后,会导程序运行的速度过慢所以我们需要一个垃圾回收的机制,来处程序运行过程中产生当一个对象没有任何的变量或性对它法行引用,此时我们将永远无法操作对象,此时这种对象就是一个圾,这种对象过多会占用大量的内存空间,导致程序运行变慢所以垃圾必须进行处理在现的JS中拥有自动的垃圾回收机制,会动将这些垃对象从内存中销毁,我们不需要也不能进行垃圾回收的操作我们做的只是要将不内使用的对设置null即可图中我们可原创 2021-04-13 19:55:15 · 152 阅读 · 1 评论 -
C#底层模拟实现Stack数组栈,栈的先进后出。
对于栈,普通用户只需要能够获取栈的元素数量,是否为空,增删查,就可以了,所以我们定义一个规范。*====接口*定义一个泛型接口IStackusing System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 数组栈{ interface IStack<E> { //栈中元素数量原创 2021-04-11 23:58:59 · 491 阅读 · 0 评论 -
C#装箱和拆箱,泛型和非泛型比较。
装箱:是值类型转换为引用类型拆箱:引用类型转换为值类型 引用类型:任何称为类 的类型都是引用类型,使用class修饰 如:string object 值类型:所以值类型都称为结构或者枚举,使用struct或enum修饰 如:int float double char简单的了解了什么是装箱拆箱后现在我们来看ArrayList和泛型的一个简单对比 看代码using System;using System.Colle原创 2021-04-05 18:06:37 · 333 阅读 · 0 评论 -
C#动态数组ArrayList类的实现,动态扩容动态缩容实现。增删改查的底层实现
主要实现动态扩容动态缩容,增删改查的底层实现。代码有注释。可以直接复制类去跑。using System;using System.Collections;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace DataStucte{ class Program { static System.Di原创 2021-04-02 00:11:56 · 815 阅读 · 0 评论 -
C#解决窗体重绘闪烁问题---双缓冲机制
双缓冲使用内存缓冲区来解决由多重绘制操作造成的闪烁问题。 当启用双缓冲时,所有绘制操作首先呈现到内存缓冲区,而不是屏幕上的绘图图面。 所有绘制操作完成后,内存缓冲区直接复制到与其关联的绘图图面。 因为只在屏幕上执行一项图形操作,所以消除了与复杂绘图操作关联的图形闪烁。对于大多数应用程序而言,由 .NET Framework 提供的默认双缓冲将提供最佳结果。 默认情况下,标准 Windows 窗体控件是双缓冲的。 可以通过两种方法对窗体和所创作的控件启用默认双缓冲。 一种方法是将 DoubleBuffered原创 2021-03-23 01:17:08 · 1884 阅读 · 1 评论 -
C#中的Lambda表达式的演化过程
=============演化过程转载 2021-03-17 17:28:25 · 124 阅读 · 0 评论 -
C#泛型详解
====================C#泛型详解转载 2021-03-17 17:22:15 · 63 阅读 · 0 评论 -
C#互斥锁Mutex的用法
C#中Mutex是互斥锁,位于System.Threading 命名空间中。顾名思义,它是一个互斥的对象,同一时间只有一个线程可以拥有它,该类还可用于进程间同步的同步基元。如果当前有一个线程拥有它,在没有释放之前,其它线程是没有权利拥有它的。我们可以把Mutex看作洗手间,上厕所的人看作线程;上厕所的人先进洗手间,拥有使用权,上完厕所之后出来,把洗手间释放,其他人才可以使用。线程使用Mutex.WaitOne()方法等待C# Mutex对象被释放,如果它等待的C# Mutex对象被释放了,它就自动拥有原创 2021-03-15 13:14:49 · 2575 阅读 · 0 评论 -
C#多线程Monitor类锁定资源Monitor.TryEnter()的用法。通过一个例子告诉你什么是死锁。和解决方案
Monitor.TryEnter(lock1, TimeSpan.FromSeconds(5))该方法是检查锁对象在指定时间内是否释放资源,如果释放则返回true否则false下面是死锁的例子:(大家复制到自己VS中跑一下,我给的是完整控制台代码,打断点调试一下,结合着我的注释,写的很详细。应该会理解的。)using System;using System.Collections.Generic;using System.Linq;using System.Text;using System原创 2021-03-14 18:20:18 · 1811 阅读 · 0 评论 -
C#的异常处理之Throw关键字
C#的异常处理之Throw关键字转载 2021-03-13 18:06:22 · 809 阅读 · 0 评论 -
C#如何让主窗体再后台运行,不在windows窗体显示。
将主窗体的ShowlnTaskbar属性设为 False,将其 WindowState属性设为 Minimized,程序即可变成后台运行程序。原创 2021-02-26 15:56:20 · 1415 阅读 · 0 评论 -
C#网络编程客户端(TcpClient)服务端(TcpListener)实现聊天通信
效果如图:服务端主要通过TcpListener类的Start方法监听,通过Acceptsocket方法来接收请求信息。下面分别给出三个按钮的代码:服务器 开始监听代码如下:private void button1_Click(object sender, EventArgs e) { try { //在指定端口上侦听 listenner = new TcpList原创 2021-02-22 15:50:10 · 2422 阅读 · 0 评论 -
C#网络编程之异步模式下的套接字(Socket)服务器和客户端(聊天工具)开发
先看实现效果:代码下载点击这里异步开发设计思路和同步开发设计思路一样可以简单看下同步开发异步开发的区别在于,接收信号的方法和发送信息接收信息的方法还有连接的方式采用了异步模式。接收信号采用 Socket 的BeginAccept()发数据采用BeginSend()接收数据采用的BeginReceive()连接采用的是BeginConnect()这些方法的具体用法可以自行百度。下面来看服务器的核心代码。监听代码: try { /原创 2021-02-21 16:44:57 · 579 阅读 · 0 评论 -
C#线程之详解 ManualResetEvent
此文章解释的通俗易懂C#线程之详解 ManualResetEvent原创 2021-02-21 09:54:16 · 233 阅读 · 0 评论 -
C#网络编程之同步模式下的套接字(Socket)服务器和客户端(聊天工具)开发
先看实现效果:简单说一下实现的思路,一.服务器开发思路1.先实例化一个主机,当服务器。2.创建套接字通信3.绑定主机4.启动监听5. accsock = sock.Accept(); 等待客户端连接。同步模式下 如果客户端未连接将不会执行后面代码。6. 如果客户端连接,那么就可以进行通信7. 通信分为发送消息和接收消息8. 断开连接1-6的代码如下: private void accp() { //创建一个主机原创 2021-02-20 21:35:55 · 651 阅读 · 0 评论 -
C#网络编程之基础语法 网络流(NetworkStream) 文本流(Stream) 文件流(Filestream )
Socket 的创建。// 创建负责监听的Socket // 第一个参数AddressFamily设置网络寻址协议,InterNetwork表示IPV4 // 第二个参数SocketType设置数据传输方式(Socket类型),这个要根据第三个参数来设置,Stream此类型的 Socket 与单个对方主机进行通信,并且在通信开始之前需要远程主机连接 // 第三个参数为UDP协议时,第二个参数就要为Dgram(报文) S原创 2021-02-19 10:20:16 · 3708 阅读 · 1 评论 -
阿里云远程服务器IIS部署HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效。解决方法
解决方案!!!!原创 2021-02-14 10:17:19 · 575 阅读 · 0 评论 -
C#之selenium自动化操作+如何解决元素未加载的异常+自动播放网课案例,再也不用为看网课发愁呢。
selenium的安装使用 网上都有很详细的资料这里主要讲一下元素未找到并且抛出异常的解决办法,网上大多都是WebDriverWait的使用案例,但我用了一下情况不理想。并且他都会抛出一个异常。所以用的最直接的办法 就是抛出异常解决异常,反正网页加载完后,它总会找到,具体看代码。 try { emlment = driver.FindElement(By.CssSelector("#notLogin span a"));原创 2021-02-08 17:20:18 · 620 阅读 · 1 评论 -
C#之索引器 ==== 案例
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 索引器重载{ class Program { static void Main(string[] args) { FailSofArray fs = new FailSofArray(原创 2020-11-14 10:53:12 · 112 阅读 · 0 评论 -
C#之按位或‘|‘按位与‘&’bool类型的用法详细解释
这里不介绍按位或按位与的二进制算法,网上大都说的都是关于int类型二进制的按位与和按位或的用法,这里我们来看看bool类型的用法。具体看代码 static void Main(string[] args) { int i = 0; Console.WriteLine("========================按位与"); Console.WriteLine("false&true\t{0}",fals原创 2020-11-05 13:13:15 · 2031 阅读 · 0 评论 -
C#之重载运算符++,-,+有案例。
您可以重定义或重载 C# 中内置的运算符。因此,程序员也可以使用用户自定义类型的运算符。重载运算符是具有特殊名称的函数,是通过关键字 operator 后跟运算符的符号来定义的。与其他函数一样,重载运算符有返回类型和参数列表。例如,一下案例,有注释class Program { static void Main(string[] args) { Threed a = new Threed(1,2,3); Threed原创 2020-10-30 17:16:54 · 752 阅读 · 0 评论