C#
文章平均质量分 86
JimCarter
与专业人员为伍,guyiming2011@126.com
展开
-
【转】新版 C# 高效率编程指南
C# 从 7 版本开始一直到如今的 9 版本,加入了非常多的特性,其中不乏改善性能、增加程序健壮性和代码简洁性、可读性的改进,这里我整理一些使用新版 C# 的时候个人推荐的写法,可能不适用于所有的人,但是还是希望对你们有所帮助。注意:本指南适用于 .NET 5 或以上版本。在合适的时候使用 C# 的新特性,不但可以提升开发效率,同时还能兼顾代码质量和运行效率的提升。但是切忌滥用。新特性的引入对于我们写高质量的代码无疑有很大的帮助,但是如果不分时宜地使用,可能会带来反效果。转载 2024-07-11 10:26:17 · 137 阅读 · 0 评论 -
【C#】使用ffmpeg image2pipe将图片保存为mp4视频
在使用原生ffmpeg之前,笔者使用了几个第三方的nuget库,如:FFmpeg.AutoGen、Xabe.FFmpeg、Accord.Video.FFMPEG。前两个库要么只支持将文件夹里现有的图片保存为mp4,要么不支持设置每帧的PTS,导致生成的mp4播放速度太快。ffmpeg只是提供了一个exe,并没有官方的API可供我们调用,只提供了一大堆的参数说明,真是令人头大。最后,只能使用的原生的ffmpeg了。在正式开始之前,先介绍下我的需求是怎么样的,基于此需求如何使用ffmpeg实现。原创 2022-09-19 12:15:15 · 6561 阅读 · 12 评论 -
C# 编码规范
从业多年,不断发现有很多团队的代码写的很随意,各种风格、命名方式都有,有用c++风格的,有用java风格的。所以本人在这里介绍下微软官方的C#编码规范,规范本身内容其实不长,但是如果能过一遍,相信对以后自己的编码会有很大帮助。注:本文不是一定适用所有人和所有团队,供大家参考。默认的就是最好的。......原创 2022-08-18 22:07:25 · 3416 阅读 · 0 评论 -
【C#】RabbitMQ高阶指南(三)(完)
续上一篇文章:【C#】RabbitMQ进阶指南文章目录引言1. 存储机制1.1 队列的结构1.2 惰性队列(lazy queue)2. 内存和磁盘告警2.1 内存告警2.2 磁盘告警3. 流控3.1 流控原理4. 镜像队列引言本文将会在原理层面,进一步剖析并了解RabbitMQ的实现原理,可以帮助我们在实际工作中透过现象看到本质。比如一个队列的内部存储其实是由5个子队列来流转运作的,队列中的消息可以有4中不同的状态等,通过这些可以明白在使用RabbitMQ时尽量不要有过多的消息堆积,不然会影响整体性能原创 2022-03-20 17:05:06 · 3078 阅读 · 0 评论 -
【C#】RabbitMQ进阶指南(二)
文章目录1. 消息何去何从1.1 备选交换机(Alternate Exchange,AE)2. 过期时间设置(Time to Live, TTL)2.1 设置消息的过期时间2.1.1 通过队列设置2.1.2 单独设置某个消息的ttl2.2 设置队列的过期时间3.死信队列(Dead-Letter-Exchange,DLX)4. 延迟队列5. 优先级队列6. 持久化7. 生产者确认7.1 事务机制7.2 发送方确认机制7.2.1 发布一条消息就等待一次确认结果7.2.2 批量发布N条消息等待一次确认结果7.2.原创 2022-02-27 10:42:05 · 2677 阅读 · 0 评论 -
Serilog 2.10 中文文档
文章目录1. 快速开始2. 基本配置2.1 Sink2.2 输出模板2.3 日志等级2.3.1 日志等级判断2.3.2 动态日志等级2.4 不同级别的日志输出到不同的地方2.5 Enrichers2.6 根据Enricher的值进行过滤2.7 Sub-logger2.8 从配置文件读取配置3. 结构化数据4. 消息模板5. 自定义序列化json本文基于发稿时的最新版本,Serilog: 2.101. 快速开始这里以控制台应用为例,首先安装以下三个nuget包:SerilogSerilog.Sink原创 2021-11-26 18:08:41 · 4336 阅读 · 4 评论 -
【C#】RabbitMQ入门指南(一)
文章目录1.简介2. 相关概念2.1 消息中间件2.2 消息中间件的作用2.3 RabbitMQ中的一些概念2.4 RabbitMQ模型3. 点对点3.1 轮询消费3.2 手动发送ACK与数据持久存储4.发布订阅4.1 交换机(Exchange)4.2 `fanout`交换机4.3 路由(Routing)4.3.1 `Direct`交换机4.4 主题(Topics)4.4.1 `Topic`交换机4.4.2 最终实现5. 远程过程调用(RPC)6. 发布确认(Publisher Confirms)6.1 发原创 2021-07-17 17:14:30 · 10350 阅读 · 5 评论 -
【C#】winform安全的跨线程访问控件
很多winform开发的新人,在子线程(非UI线程,线程id不为1)要更新控件的text属性时经常会遇到不允许跨线程访问控件的异常:Cross-thread operation not valid. Control “” accessed from a thread other than the thread it was created on。那么在这篇文章里就总结下如何该正确的跨进程访问控件。如果你从一个不同的线程要访问控件(包括Form),则必须调用控件的这四个方法Invoke、BeginInvo原创 2021-02-05 18:18:29 · 3764 阅读 · 0 评论 -
【C#】解决使用async/await时,await之后的方法没有resume到之前线程执行
一般来说,await会捕获当前同步上下文SynchronizationContext.Current,如果同步上下文为null,则继续捕获TaskScheduler.Current。await之后的代码会恢复到捕获的上下文继续执行。但是如果你的异步操作执行的比较早,例如在Application.Run(new Form1())之前执行: static class Program { /// <summary> /// The main entry po原创 2020-12-30 16:26:36 · 770 阅读 · 0 评论 -
【C#】使用AutoMapper-看这篇就够了
1.基本配置Profile配置public class OrganizationProfile : Profile{ public OrganizationProfile() { CreateMap<Foo, FooDto>(); }}使用:var configuration = new MapperConfiguration(cfg => { //cfg.CreateMap<Foo, Bar>(); cfg.AddProfile<原创 2020-11-20 10:22:04 · 36737 阅读 · 1 评论 -
【WPF】右下角弹出自定义通知样式(Notification)——简单教程
1.先看效果2.实现1.主界面是MainWindow上面就只摆放一个Button即可。在Button的点击事件中需要new一个弹出的NotificationWindow。代码如下: public static List<NotificationWindow> _dialogs = new List<NotificationWindow>(); int i = 0; private void Bu原创 2017-07-13 18:11:04 · 12806 阅读 · 9 评论 -
【C#】vs2012 安装与部署 怎么打包程序(InstallShield 2013 Limited Edition for Visual Studio)
打包需要这个:InstallShield 2013 Limited Edition for Visual Studio 。关于怎么下载安装就自己百度吧,我就不写了。InstallShield程序打包图解 VS2012中打包工具被看做程序集,在使用时和程序集一样被创建到程序解决方案下。需要我们做的是添加项目即可。但是对于初次使用的朋友来说,我们需要根据提示一步步的先下载安装该打包工原创 2014-12-03 17:39:53 · 11840 阅读 · 1 评论 -
【C#】获取任意文件的缩略图
因为用shell取缩略图时,对于损坏的文件,读出来的图有黑边,所以就诞生了以下方法,不过这个效率要比用shell取的低3-4倍。1.添加类WindowsThumbnailProvider[Flags] public enum ThumbnailOptions { None = 0x00, BiggerSizeOk = 0x01, InMem...原创 2017-09-20 16:47:11 · 5224 阅读 · 3 评论 -
【C#】WixToolset快速入门教程
介绍给windows系统做软件,常见的打包工具大家可能都听说过,如:大名鼎鼎的Installshield、Inno setup等。在遇见Wix之前InstallShield时我的主力打包工具,操作简单方便项目使用到的dll文件会自动添加,多语言支持也很好,不过不好的是免费版的功能就那几样,越来越无法满足自己的要求。后来就尝试了下Inno setup,这个是用脚本进行配置并生成安装包的,简单尝试之后发原创 2017-09-02 17:11:03 · 20002 阅读 · 0 评论 -
【C#】winform 运行时拖动控件 修改大小
在网上资源发现的,可以对任意控件操作,使其可拖动,可运行时生成8个白色方块,鼠标拖动方块可改变大小。效果如图。把这个贴出来,大家都可以学习下载地址:http://pan.baidu.com/s/1qW7FSYg备份下载地址:http://filemarkets.com/fs/ds6letci5afnex6ia9/转载 2014-12-08 15:18:14 · 3087 阅读 · 0 评论 -
【C#】wpf添加gif动图支持
1.nuget里下载WpfAnimatedGif包,然后安装。2.添加WpfAnimatedGif包的命名空间:xmlns:gif="http://wpfanimatedgif.codeplex.com"3.开始使用: 这段代码只是个示例,主要的就是把AnimatedSource设置为你的gif动画即可。总的代码:<Page x:Class="Omni.To原创 2017-06-08 17:21:27 · 6742 阅读 · 7 评论 -
【VisualStudio】常用快捷键
编辑.在文件中查找(全局搜索) Ctrl+Shift+F 视图.快速操作和重构(智能提示) Ctrl+. 格式化代码 Ctrl+K+D原创 2018-08-08 20:29:02 · 768 阅读 · 2 评论 -
【C#】笔记本
1.重命名文件vb.net中有My.Computer.FileSystem.RenameFile这个方法 但是在C#中如何使用呢?? 其实很简单 只需以下几步1.先添加引用:Microsoft.VisualBasic,再加上using Microsoft.VisualBasic.Devices;2.就下面两行 Computer MyComputer...原创 2014-12-25 14:04:33 · 2002 阅读 · 1 评论 -
【VS】使用vs2017自带的诊断工具(Diagnostic Tools)诊断程序的内存问题
前言一般来说.NET程序员是不用担心内存分配释放问题的,因为有垃圾收集器(GC)会自动帮你处理。但是GC只能收集那些不再使用的内存(根据对象是否被其它活动的对象所引用)来确定。所以如果代码编写不当的话,仍然会出现内存泄漏的问题,常见的情况有:一个静态变量引用了一个应该被释放的对象,事件注册后不解除注册,非托管资源使用后没有手动释放。不断的内存泄漏终会引起内存不足,挂掉你的程序。对于这种内存原创 2018-01-08 16:02:37 · 39487 阅读 · 4 评论 -
【C#】解决MouseHook捕获鼠标动作,在有些电脑上SetWindowsHookEx失败返回0的问题
最近在debug鼠标位置捕获的功能时发现在其中的一台开发电脑上,SetWindowsHookEx一直返回0,导致Hook设置失败,有时候调成Release模式又是正常的。代码如下:hMouseHook = SetWindowsHookEx(WH_MOUSE_LL, MouseHookProcedure,Marshal.GetHINSTANCE(System.Reflection.Assem...原创 2017-08-30 11:27:47 · 8476 阅读 · 2 评论 -
【C#】使用EF访问Sqlite数据库
1. 先上nuget下载对应的包 如图,搜索System.Data.SQLite下载安装即可,下载完之后带上依赖一共有这么几个:EntityFramework System.Data.SQLite System.Data.SQLite.Core System.Data.SQLite.EF6System.Data.SQLite.Linq安装完成后,会添加App.c...原创 2018-05-15 11:28:15 · 21290 阅读 · 3 评论 -
【C#】使用ADO.NET/Dapper访问Sqlite数据库,SqliteHelper帮助类
这个就比较简单了,用过sqlserver的人都知道访问数据库的时候一般都会有个SqlHelper的帮助类,这里就依葫芦画瓢写了个SqliteHelper,很简单:using System;using System.Collections.Generic;using System.Data;using System.Data.SQLite;using System.IO;using...原创 2018-05-15 16:20:30 · 8200 阅读 · 1 评论 -
【C#】winform多语言方案
1.CultureInfo的获取和设置CultureInfo通常由两位小写的LanguageCode+两位大写的Country/RegionCode组成,如:zh-CN,zh-TW,jr-JP,en-US,zh-HK。部分地区由languageCode+sripttag+country/regioncode,如zh-Hans-HK(香港简体中文)。 几个有用的属性:CultureInf...原创 2018-06-04 14:25:11 · 13461 阅读 · 2 评论 -
【C#】winform自定义控件在工具箱中显示和属性在属性面板中显示
在开发自定义控件件时,有好些Design属性是要使用的,如ToolboxItem, ToolboxBitmap, Category, Description等等,不知道这些属性其实也可以将控件搞出来,不过,知道了,会令事件更加简单,令控件更加专业和实用。有时,不知道用法,会令到项目的其他同事好烦,因为这个控件是你提供的。下面对一些常用的Design属性做一个简单的生产介绍。ToolboxIte...转载 2019-02-12 17:35:07 · 12415 阅读 · 2 评论 -
【C#】在.net framework的控制台程序中使用HttpClientFactory
一般来说我们发送Web请求的时候,都是通过HttpClient。但是使用的时候会有两个问题:因为HttpClient实现了IDisposable接口,每次使用如果都new一个对象的话,最后会耗尽你的主机端口。微软建议使用单例模式。如果使用单例模式的话,端口是节省了,但是请求地址的DNS如果改变了的话,这个单例并不知道。为了解决上面的两个问题,社区就出现了HttpClientFactory...原创 2019-02-25 19:15:14 · 6985 阅读 · 2 评论 -
解决PostSharp Essentials限制最多50个class使用的问题
因为PostSharp其他版本一直都是收费的,所以项目里用的都是Essentials版本,功能都是一样的,只不过有些其它的限制。比如每个project里不能有超过10个class使用PostSharp,每个solution里不能超过50个class使用PostSharp。在之前这个限制倒没怎么影响到我,但随着项目越来越大,50个class已经不够用了。怎么办? 网上搜了下破解方法,有的干脆不能...原创 2020-08-26 12:42:39 · 2859 阅读 · 0 评论 -
【C#】ElasticSearch环境搭建与使用
以前在.net里如果要做全文搜索的话,一般都会使用Lucene.net配合盘古分词。使用起来麻烦而且还不容易查看数据,后来就出现了ElastiSearch。ES也是基于Lucene并采用java编写, 相当于对Lucene做了一层封装,我们只需要调用ES相关API即可,配合Kibana数据可视化工具可以很方便的分析和统计数据。## 1.安装这里以windows环境为例,linux类似。移步到ES官网,下载ElasticSearch和Kiba原创 2019-07-16 19:22:25 · 9074 阅读 · 4 评论 -
【C#】解决进行反序列化时出错:。InnerException 消息是“反序列化对象 属于类型 System.String 时出现错误。读取 XML 数据时,超出最大字符串内容长度配额 (8192)。
解决:.NET进行反序列化时出错:。InnerException 消息是“反序列化对象 属于类型 System.String 时出现错误。读取 XML 数据时,超出最大字符串内容长度配额 (8192)。通过更改在创建 XML 读取器时所使用的 XmlDictionaryReaderQuotas 对象的 MaxStringContentLength 属性,可增加此配额。 第 137 行,位置为 76原创 2015-09-11 18:01:24 · 11236 阅读 · 0 评论 -
【C#】简单解决PathTooLong的Exception
前提windows系统路径的最大长度限制是260个字符(听说.Net 4.6.2,取消了这个限制),而Linux或者Unix系统的好像是4K个字符。所以如果一个文件夹由Linux系统创建,然后由windows系统读取处理的话,就会出现PathTooLong的异常。解决方法其实很简单在VS中添加如下Nuget包: 在用到的地方把系统的File和Directory替换为LongPathFile和Lon原创 2017-06-27 10:09:15 · 2377 阅读 · 1 评论 -
【C#】 winform 一个窗体修改另一个已经存在的窗体的属性
用new 的方法是行不通的。原创 2014-10-26 15:39:29 · 5238 阅读 · 0 评论 -
【VS】VS2012必备插件
我安装的是VS2012 Ultimate英文版(90天试用版),安装时间大概在一个小时左右(安装的同时还在做别的)。总体感觉上,除了界面大变样之外,和VS2010差别不大。从打开VS2010项目sln文件不需要升级这一点来看,似乎是同一核心的,只是换了个皮?【注: VS2010升级Service Pack 1之后可以直接打开VS2012创建的sln文件哦】IDE的启动速度和项目原创 2014-09-19 10:23:17 · 4273 阅读 · 1 评论 -
【C#】解决devexpress新建的Form窗体没有继承默认样式的问题
1.下载devdevexpress14.1破解版下载:链接: http://pan.baidu.com/s/1kU35oN1 密码: 3kgv2.如果新建的form没有继承dev的样式则:只要在项目中的Program.cs中添加如下两句即可: DevExpress.Skins.SkinManager.EnableFormSkins(); DevExpress.Skins.SkinManager.EnableMdiFormSkins();即:原创 2015-12-14 14:01:24 · 4852 阅读 · 1 评论 -
【C#】打印控件中的内容和打印窗体中的内容
效果示意:操作步骤:1、新建winform项目及创建窗体2、拖取 打印 相关控件 PageSetupDialog 、 PrintDialog 、 PrintDocument 、PrintPreviewDialog3、设置上述控件的Document属性为相应的PrintDocument4、设置按钮等控件 及 添加相应按钮事件5、示意代码转载 2016-03-31 20:05:57 · 11654 阅读 · 1 评论 -
【C#】C#读取Excel中的数据
1.连接字符串中的:Microsoft.Ace.OleDb.12.0。既可以连接xls文件又可以连接xlsx文件,不建议使用Microsoft.Jet.OLEDB.4.0了,这个只能连接xls的excel.2.连接字符串中的txtPath.Text就是你的excel文件的路径名,如:C:\Users\Jim\Desktop\2016.2.24.xlsx。其中的HDR=YES,是声明Excel表中的第一行是列名而不是数据,HDR=NO,则相反。3.如果读取到的Excel中有空白行数据,就用sql语句中的i原创 2016-03-08 14:28:12 · 950 阅读 · 0 评论 -
路径中 斜杠/和反斜杠\ 的区别
最近在项目中遇到了一个小问题,纠结了半天。路径中使用斜杠/和反斜杠\的区别到底是什么。查阅了一些资料后可知。Unix使用斜杆/ 作为路径分隔符,而web应用最新使用在Unix系统上面,所以目前所有的网络地址都采用 斜杆/ 作为分隔符。Windows由于使用 斜杆/ 作为DOS命令提示符的参数标志了,为了不混淆,所以采用 反斜杠\ 作为路径分隔符。所以目前windows系统上转载 2016-03-16 14:07:19 · 921 阅读 · 0 评论 -
【VS】InstallShield Limited Edition for Visual Studio 2013 图文教程(教你如何打包.NET程序)
从Visual Studio 2012开始,微软就把自家原来的安装与部署工具彻底废掉了,转而让大家去安装使用第三方的打包工具“InstallShield Limited Edition for Visual Studio”,注意这个版本是免费的,只需要邮件注册下,就会有要注册码。虽然不知道微软这是何用意,但是既然他叫我们用,那就去用吧。(其实,早在VS2010中,微软就把InstallShield转载 2014-10-16 21:02:30 · 1412 阅读 · 0 评论 -
【C#】窗体控件随窗体大小改变(包括字体大小)
其实Anchor和Dock属性也可以实现,但好象只对容器效果理想,而且字体大小也没有变化.最近论坛上有好多这样的贴子,具体实现代码如下:转载 2014-10-08 17:32:55 · 4920 阅读 · 0 评论 -
【C#】datagridview里加一列序号
方法一:处理数据源,假设原来绑定的数据源为DataTable dtC# code?123456789DataTable ndt = new DataTable();DataColumn dc = new DataColumn();dc.Column转载 2015-06-29 14:51:38 · 4398 阅读 · 0 评论 -
【C#】打印机 printDocument、printDialog、PageSetupDialog、printPreviewDialog
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Drawing.Printing;using System.Linq;using System.Text;using System.原创 2015-06-25 16:50:23 · 2517 阅读 · 0 评论 -
【C#】winform 图片局部放大类似淘宝
整体效果:有两个picturebox控件,name默认没有修改。其中picturebox1的img赋予初始值,picturebox2的visible=false;其余不变,程序比较简单,看以参考下。using System;using System.Collections.Generic;using System.ComponentModel;using Syst原创 2014-11-26 11:54:10 · 5074 阅读 · 0 评论