C#
文章平均质量分 77
begeneral
这个作者很懒,什么都没留下…
展开
-
EFCore 基于Code First开发的配置
EFCore Code First配置原创 2023-09-12 12:04:33 · 278 阅读 · 0 评论 -
C# 监听WMI事件
C# WMI事件原创 2021-12-10 16:47:38 · 1286 阅读 · 0 评论 -
ASP.NET CORE 依赖注入服务生命周期
依赖注入服务有3种生命周期:Transient;Scoped;SingletonTransient:即用即建,用后即弃。就是每次获取这个服务的实例时都要创建一个这个服务的实例。Scoped:这种类型的服务实例保存在当前依赖注入容器(IServiceProvider)上,这个后面会有详细的讲解。Singleton:单例。即只保存一个服务实例下面我们来做一个实例的演示,让大家可以更深入地理解这3中生命周期我的测试环境:win10+vs2019+.net core 3.1新建一个.NET原创 2021-01-18 12:21:01 · 2042 阅读 · 0 评论 -
Devexpress Gridview 添加全选列
Devexpress版本:20.2.31、选择Gridview,点击Run Designer,进入Views选项卡2、找到OptionsSelection设置项,设置如图:原创 2020-12-30 16:28:51 · 820 阅读 · 0 评论 -
C# webpai 路由详解
关于MVC的路由,相信大家都很熟悉了。我们常见的路由是:{controller}/{action}/{id},这个默认的路由能满足我们日常的需要,因为这个路由非常简单,所以这里就不做介绍了,今天我们重点介绍一下Route和RoutePrefix这两个路由特性直接上代码吧:[RoutePrefix("values")] public class ValuesController : ApiController { [HttpGet] [Route("G原创 2020-09-19 14:24:53 · 2560 阅读 · 1 评论 -
SignalR实现从服务端主动发送数据到客户端
场景:服务端在后台开启了一个HttpListener的监听器来监听第三方设备通过http协议发送过来的设备实时数据,当服务端接收到设备的实时数据后,通过SignalR技术将数据发送到前端我们先看服务端添加SignalR组件的步骤吧。首先我们要从NuGet上查找SignalR组件,安装以下两个组件:在当前项目上右击,添加新建项,找到OWIN Startup类,点击添加。代码如下:public void Configuration(IAppBuilder app) {.原创 2020-08-21 17:57:51 · 3199 阅读 · 0 评论 -
C# Task.Delay和Thread.Sleep的区别
我们大家都知道Task.Delay是异步等待,Thread.Sleep是同步等待,那到底同步等待和异步等待有什么区别呢?下面我们用例子来分析一下,新建一个控制台应用程序,代码如下:static async Task Main(string[] args) { for (int i = 0; i < 5; i++) { var s = await MyTask();原创 2020-07-29 11:17:07 · 2334 阅读 · 0 评论 -
ASP.NET CORE在类库项目中读取配置文件
直接上代码吧:public static string ReadConnectString(string connectName) { var config = new ConfigurationBuilder().Add(new JsonConfigurationSource() { Path = "appsettings.json", Optional = true原创 2020-07-24 09:15:52 · 496 阅读 · 0 评论 -
EF CORE在ASP.NET CORE项目中基于数据库优先模式生成实体模型
测试环境:1、vs2019社区版2、EF CORE 3.1.63、ASP.NET CORE 3.1首先我们使用VS新建一个ASP.NET CORE的项目,然后新建一个.Net Core的类库。因为在大多数情况下,我们都需要把对数据库的操作放在一个类库中,避免所有的业务逻辑都放在web项目中。这里有一点要注意一下,就是这个类库必须是.NET Core的类库,不能是.NET Standard的类库,不然的话会报下面这个错误:类库建好以后,把这个类库设置为启动项目。然后使用NuGet包添.原创 2020-07-24 08:52:09 · 993 阅读 · 0 评论 -
.NET Standard详解
.NET Standard是一套协议规范,不像.NET Framework,后者是一个完整的技术框架,而前者只是定义了一套规范,遵守这套规范的.NET Standard类库可以被不同.NET框架引用,比如.NET Core项目和.NET Framework项目都可以引用这个类库。Standard这个单词就是标准、规范的意思,.NET Standard旨在建立一套标准,解决不同.NET框架之间的兼容性问题。关于.NET Standard的概念以及版本支持的知识,请大家参考MSDN的介绍:https:/原创 2020-06-30 08:05:48 · 6786 阅读 · 0 评论 -
.NET类型转移
我们大家都知道,一般框架都能够实现向下兼容,那具体这个兼容是怎么实现的呢?首先我们使用.Net Framework 3.5 创建一个控制台程序, 代码如下:static void Main(string[] args) { Console.WriteLine(typeof(string).Assembly.FullName); Console.WriteLine(typeof(Func<>).Assembly.FullNa原创 2020-06-28 10:51:20 · 249 阅读 · 0 评论 -
.NET跨平台原理(上篇)
1、.NET Framework层次结构FCL(Framework Class Library) BCL(Basic Class Library) CLR(Common Language Runtime) FCL:这是一个为开发人员提供的API类库,比如我们经常使用的框架:Windows Forms、ASP.NET、WPF、WCF等。这一层是直接面向开发人员的。BCL:这是处于底层的类库,提供与操作系统层面交互的代码,如:IO、线程管理CLR:它为程序提供一个托管的执行环境,是.NE原创 2020-06-24 13:56:54 · 1544 阅读 · 0 评论 -
EF Code First 数据库迁移命令
Enable-Migrations [-ContextTypeName <String>] [-EnableAutomaticMigrations] [-ProjectName <String>] [-StartUpProjectName <String>] [-ConnectionStringName <String>] [-Force] [<...原创 2020-03-26 07:40:32 · 295 阅读 · 0 评论 -
c# task异常处理
我们这里说的task异常处理其实指的是异步方法的异常,现在处理异步我们基本上用的都是task,所以这里只讨论了task的异常处理。在没有出现task之前,我们一般用BeginInvoke方法开始异步,然后在这个方法里面定义一个回调函数,在这个回调函数里处理异常,由于这个方法已经过时,这里就不做介绍了。异常处理一般包括两种:1、将异常信息写入到错误日志。2、抛出异常。这里我们讨论第二种情况。因为...原创 2020-01-17 20:10:32 · 5112 阅读 · 0 评论 -
C# 任务和线程的区别
任务即Task类,线程即Thread类。使用任务执行并行和并发代码是微软强烈推荐的,因为任务比线程的抽象级别更高,而且任务是并行的。关于并发和并行的区别,这里就不做介绍了,网上有很多资料。1、线程池创建任务的基本原理是使用线程池,也就是说任务最终也是要交给线程去执行的。但是微软优化了任务的线程池,使线程的控制更加精准和高效。对于需要频繁创建线程的程序来说,使用线程池无疑是最好的选择。因...原创 2020-01-15 11:23:58 · 2393 阅读 · 0 评论 -
c# 调试技巧
大家都知道,打断点是最为大家所熟知的调试技巧,但是除了打断点,还有哪些调试的技巧呢?System.Diagnostics;这个命令空间里有很多可供调试的类库。Diagnostics这个单词的意思是诊断,在软件的世界里就是诊断程序存在的问题,即调试。下面为大家介绍这个类库里几个非常实用的方法,这几个方法只在DEBUG模式下被编译,而在Release模式下是不会被编译。1、Debug.Writ...原创 2020-01-06 10:34:48 · 1449 阅读 · 0 评论 -
VS2017社区版远程调试
1、首先在VS的安装目录下找到Remote Debugger目录,我本机的目录是:C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\Remote Debugger。然后将该目录拷贝到远程目标机上。在该目录下面找到文件msvsmon.exe,运行该exe文件,打开远程调试器。2、将需要远程调试的...原创 2019-12-30 14:27:29 · 612 阅读 · 1 评论 -
c# Newtonsoft.Json序列化字符串
之前一直以为Newtonsoft.Json在将字符串序列化成一个对象的时候,如果有不匹配的字段,序列化会报错或者返回NULL。今天测试了一下发现不是这么回事。新建了一个测试类:class TestCls { /// <summary> /// 姓名 /// </summary> public st...原创 2019-11-07 11:03:09 · 696 阅读 · 0 评论 -
DEVEXPRESS Gridview单元格字符串中有换行符的处理方法
DEVEXPRESS版本:15.2.4当列单元格中有换行符时,默认情况下只能显示第一行的字符串,解决方案如下:1.将要换行的列的ColumnEdit属性设置成MemoEdit(要增加后设置)2.将AppearanceCell->TextOptions-> WordWrap设置为true.3.将Repositor(在Designer的最左侧选择)中的OptionsView->Ro转载 2018-01-23 16:48:47 · 1890 阅读 · 0 评论 -
解决Newtonsoft.json将数据库实体表序列化为json时提示此实例已被释放的错误
Newtonsoft.json版本:10.0.0.0数据库:sqlserver2008r2Entity Framework版本:5.0.0EF查询语句如下:public DBResult<List<H_MES_USERS>> GetUsers() { DBResult<List<H_MES_USERS>> Re...原创 2018-02-26 17:34:32 · 738 阅读 · 0 评论 -
Devexpress GridView单元格设置带颜色的横向柱状图
本程序需要用到的命令空间:using System.Drawing;首先创建一个全局的表示颜色区间的表:DataTable _ColorRange = new DataTable();在窗体加载事件中初始化数据:private void Form1_Load(object sender, EventArgs e) { LoadData...原创 2019-03-09 10:39:12 · 751 阅读 · 0 评论 -
正则表达式匹配任意字符个数,包括中文、大小写英文字母、数字、符号
C#正则表达式命名空间:using System.Text.RegularExpressions;string s = "正则式,123,a11"; var match = Regex.Match(s, "^.{0,10}$"); if (match.Success) { Console....原创 2019-03-13 13:47:56 · 23775 阅读 · 0 评论 -
c# 判断一个对象的某个事件是否被注册
var property = this.BindingSource[DsQueryProc.Tables[0].TableName].GetType().GetProperty("DataSourceChanged", BindingFlags.Instance | BindingFlags.NonPublic);if(property==null) this.BindingSource...原创 2019-05-17 11:04:27 · 5391 阅读 · 0 评论 -
c# string类型存储原理
在c#里面,string类型被划分为引用类型。但是从严格意义上来说,它即不是引用类型也不是值类型,因为它即具备引用类型的特点,同时也具备值类型的特点。我们来看一个例子:static void Main(string[] args) { string a = "hello"; string b = "hello"; ...原创 2019-08-05 11:26:31 · 1217 阅读 · 0 评论 -
c# task三种创建方式的区别
大家都知道现在微软推荐创建线程的方式是使用Task类,而不是原始的Thread类。但是创建Task线程的方式有3种:Task.Run,Start,TaskFactory.StartNew,你知道这三种方式的区别吗?首先我们说Task.Run和StartNew的区别1、它是将在线程池上运行的指定工作排队,它默认的任务计划(TaskScheduler)是线程池,并且不允许修改任务计划。而Sta...原创 2019-08-01 11:44:59 · 3445 阅读 · 0 评论 -
c# modbus RTU CRC16校验和计算
校验和算法:1) 预置 1 个 16 位的寄存器为十六进制FFFF(即全为 1) , 称此寄存器为 CRC寄存器。2) 把第一个 8 位二进制数据 (通信信息帧的第一个字节) 与 16 位的 CRC寄存器的低 8 位相异或, 把结果放于 CRC寄存器。3) 把 CRC 寄存器的内容右移一位( 朝低位)用 0 填补最高位, 并检查右移后的移出位。4) 如果移出位为 0, 重复第 3 ...原创 2019-08-02 14:23:15 · 8034 阅读 · 2 评论 -
devexpress15.2 甘特图
开发环境:VS2010+.net framework4.0数据库:access 2003首先贴上软件运行时的截图:页面左边是一个ResourcesTree控件,右边是一个SchedulerControl,将SchedulerControl的ActiveViewType设置为Gantt就可以显示甘特图了。包含这两个控件的容器是一个SplitContainerContr原创 2017-05-05 14:53:41 · 6862 阅读 · 5 评论