202102-02 C# Process调用外部程序的实现 前言使用C#调用外部程序,一种是通过Process类,一种是通过命令行,本文主要说一下使用C#中的Process类调用外部程序的方式。过程:1.创建Process对象2.配置启动选项(输入、输出等)3.切换工作目录4.设置外部程序名5.设置传入参数6.启动外部程序7.等待外部程序结束8.关闭外部程序过程创建Process对象Processprocess=newProcess();//通过new创建一个Process对象process//使用Process类需要在程序最开始处引用Process类... 继续阅读 >
202102-02 c# 实现语音聊天的实战示例 一、语音聊天说专业点就是即时语音,是一种基于网络的快速传递语音信息的技术,普遍应用于各类社交软件中,优势主要有以下几点:(1)时效性:视频直播会因为带宽问题有时出现延迟高的问题,而语音直播相对来说会好很多,延迟低,并且能够第·一时间与听众互动,时效性强。(2)隐私性:这一点体现在何处,如主播不想暴露自己的长相,或者进行问题回答是,没有视频的话会让主播感到更安心,所以语音直播隐私性更强。(3)内容质量... 继续阅读 >
202102-02 C# 9 新特性——record的相关总结 IntroC#9中引入了record,record是一个特殊类,用它来实现model在有些情况下会非常的好用SamplerecordRecordPerson{publicstringName{get;init;}publicintAge{get;init;}}recordRecordPerson2(stringName,intAge);publicstaticvoidMainTest(){varp1=newRecordPerson(){Name="Tom",Age=12,};Console.WriteLine(p1);varp2=p1with{Age=10};Console.WriteLine(p2);varp3=n... 继续阅读 >
202102-01 c# record的使用场景 Intro之前我们有介绍过record基本知识,record会实现基于值的类型比较,最近遇到的几个问题觉得用record来解决会非常方便,分享一下基于值的类型比较最近有遇到一个场景,需要比较两个JSON字符串是否相等,字符串比较简单,就是一个固定值的Dictionary,或者认为它就是一个简单的Model,但是JSON字符串的的属性顺序可能不同,比如说下面的这个示例:{"Id":1,"Name":"Tom"},{"Name":"Tom","Id":1},这两个字符串从字... 继续阅读 >
202102-01 C# 如何实现一个基于值相等性比较的字典 Intro今天在项目里遇到一个需求,大概是这样的我要比较两个JSON字符串是不是相等,JSON字符串其实是一个Dictionary<string,string>但是顺序可能不同,和上一篇record使用场景中的第一个需求类似,前面我们介绍过使用record可以比较方便的解决,但是我们的项目是.netcoreapp3.1的,不能使用record,如何比较方便的比较呢?我们能否自己实现一个类似于record的类型,基于值去比较呢?于是就有了本文的探索StringValu... 继续阅读 >
202102-01 C#中ManualResetEvent用法总结 简单介绍 多个线程可以通过调用ManualResetEvent对象的WaitOne方法进入等待或阻塞状态。当控制线程调用Set()方法,所有等待线程将恢复并继续执行。ManualResetEvent是如何工作的 在内存中保持着一个bool值,如果bool值为False,则使所有线程阻塞,反之,如果bool值为True,则使所有线程退出阻塞。当我们创建ManualResetEvent对象的实例时,我们在函数构造中传递默认的bool值,以下是实例... 继续阅读 >
202102-01 c# 连接池的设置与使用 原由:许多用户可能在查询相同的数据库以获取相同的数据。在这些情况下,可以通过使应用程序共享到数据源的连接来提高应用程序的性能。否则,让每个用户打开和关闭单独的连接的开销会对应用程序性能产生不利影响。这样就有了连接池。实现:C#在连接字符串中设置连接池 如果使用的是OleDbConnection、OdbcConnection或OracleConnection类,则连接池将由提供程序自动处理,所以您不必自己进行管理。 &nbs... 继续阅读 >
202101-29 C#基于Twain协议调用扫描仪,设置多图像输出模式(Multi image output) 出处:https://www.cnblogs.com/SunSpringTwain随着扫描仪、数码相机和其他图像采集设备的引入,用户热切地发现了将图像整合到他们的文档和其他工作中的价值。然而,支持这种光栅数据的显示和操作成本很高,应用程序开发人员需要创建用户界面并内置设备控制各种各样可用的图像设备。一旦他们的应用程序准备好支持给定的设备,他们就会面临一个令人沮丧的现实:设备不断地升级新的功能和特性。应用程序开发人员发现他们不断地修改他... 继续阅读 >
202101-29 c# 使用谷歌身份验证GoogleAuthenticator的示例 此功能相当于给系统加了个令牌,只有输入对的一组数字才可以验证成功。类似于QQ令牌一样。一丶创建最核心的一个类GoogleAuthenticator此类包含了生成密钥,验证,将绑定密钥转为二维码。publicclassGoogleAuthenticator{privatereadonlystaticDateTime_epoch=newDateTime(1970,1,1,0,0,0,DateTimeKind.Utc);privateTimeSpanDefaultClockDriftTolerance{get;set;}publicGoogleAuthenticator()... 继续阅读 >
202101-29 C# 中如何使用Thread 线程是进程中的最小执行单元,多线程是指在给定时间内拥有多个线程的能力,并且可以调度它们从而在某一时刻处理多个操作,微软的.NetFramework提供了Thread来帮助我们完成多线程开发。Thread编程要想使用Thread,需要在程序中引用System.Threading命名空间,然后再提供一个供线程调度的方法,这个方法是通过Thread中的ThreadStart委托代理的,下面的代码展示了如何创建线程。Threadt=newThread(newThreadStart(M... 继续阅读 >
202101-29 C# 关于爬取网站数据遇到csrf-token的分析与解决 需求某航空公司物流单信息查询,是一个post请求。通过后台模拟POSTHTTP请求发现无法获取页面数据,通过查看航空公司网站后,发现网站使用避免CSRF攻击机制,直接发挥40X错误。关于CSRF读者自行百度网站HTTP请求分析 Headers FormData在head里包含了cookie与x-csrf-token formdata里包含了_csrf(与head里的值是一样的).这里通过查看该网站的JS源代码发现_csrf来自于网页的head标签里猜测cookie与 x-c... 继续阅读 >
202101-26 C# 获取动态key的json对象的值案例 问题描述如果直接获取某个json数组中的元素将得到如下的json{"44":{"height":25,"appeared":-70000000,"length":44,"order":"saurischia","vanished":-70000000,"weight":135000}}这个json对象如果使用C#类来反序列化,那么实体类的结构如下,实体类的类名需要与json对象key相同的才可以使用json反序列化,这样对程序造成了极大的不便。publicclass44{publicintheight{get;set;}publicintappeare... 继续阅读 >
202101-26 C# 中const,readonly,static的使用小结 平时在开发时经常会用到const,readonly,static关键字,可以肯定这些关键词是完全不同的概念,但有时候他们在用法上很相似以至于在场景中不知道选择哪一个,这篇文章我们就来讨论C#中的const,static和readonly关键词,放在一起比较一下看看如何选择。理解constconst常用来定义一个常量,什么意思呢?就是这个常量在你程序的生命周期内都不会被改变,因此,必须在声明常量时为其赋值,从技术角度上来说:这个常量值又被称... 继续阅读 >
202101-26 在C#中使用MSMQ的方法 MSMQ(Microsoft消息队列)是Windows中默认可用的消息队列。作为跨计算机系统发送和接收消息的可靠方法,MSMQ提供了一个可伸缩、线程安全、简单和使用方便的队列,同时为你提供了在Windows数据库中持久化消息的机会。MSDN指出:“消息队列(MSMQ)技术使在不同时间运行的应用程序能够在可能暂时离线的异构网络和系统之间进行通信。应用程序将消息发送到队列并从队列读取消息。”在使用MSMQ时,通常有两个不同的应用程序——发送者和接... 继续阅读 >
202101-26 如何使用C#修改本地Windows系统时间 C#提升管理员权限修改本地Windows系统时间在桌面应用程序开发过程中,需要对C盘下进行文件操作或者系统参数进行设置,例如在没有外网的情况下局域网内部自己的机制进行时间同步校准,这是没有管理员权限便无法进行设置。1.首先需要获得校准时间,两种方式:通过可上网的电脑进行外部获取当前时间。通过NTP实现//NTP消息大小摘要是16字节(RFC2030)byte[]ntpData=newbyte[48];//设置跳跃指示器、版本号和模式值//... 继续阅读 >
202101-26 c#基于NVelocity实现代码生成 在框架开发过程中,通用代码生成是一项必不可少的功能,c#在这后端模板引擎这方面第三方组件较少,我这里选择的是NVelocity,现在升级到了NetStandard2.0,可以用于NetCore项目添加引用初始化模板引擎及设置模板读取路径vltEngine=newVelocityEngine();vltEngine.SetProperty(RuntimeConstants.RESOURCE_LOADER,"file");vltEngine.SetProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH,CloudUtil.GetContentP... 继续阅读 >