- 博客(50)
- 收藏
- 关注
原创 可视化命中测试
可以通过重写 HitTestCore 方法重写视觉对象的默认命中测试支持。这意味着,在调用 HitTest 方法时,将调用 HitTestCore 的替代实现。当命中测试落在视觉对象的边框内时,将调用重写的方法,即使坐标落在视觉对象呈现内容之外也是如此。如果需要知道是否选择了DrawVisual需要使用可视化树的命中测试。在可视化容器里通常需要DrawVisual对象画东西。获取区域中的可视化对象。
2026-01-03 18:33:57
207
1
原创 C# 吃一堑,长一智
C# 里的WebClient,我曾经尝试使用webClient.DownloadDataCompleted += (se, ev) =>{}进行接收文件,但是却不能触发,因为我使用了autoResetEvent进行同步线程,耗时一天,以为是异步的问题,发现没听劝,webclient只适用于.net3,弃用了。使用httpClient进行接收流文件。httpClient使用。
2025-11-13 14:25:21
314
原创 MicroService(Redis)
一个请求进来,setnx,其他请求进来发现有值返回false。这时候,缓存保存的是A的数据(老数据),数据库保存的是B的数据(新数据),数据不一致了。可以看到一个读请求和一个写请求,读请求可能会读取到旧的数据,或者当写请求删除缓存失败,读请求会一直读取的是旧的缓存数据。原因:如果延迟时间小于请求2写入redis的时间,会导致请求1清除缓存的时机过早,请求2又会将旧的数据写入redis的尴尬。如果采用写请求,先删除缓存,再更新数据库就会出现如上图的情况,线程B读到的是老的数据,并且缓存中也保存的是老的数据。
2025-11-11 17:11:25
838
原创 Dotnet-Dapper的用法
Dapper是一个轻量级的ORM(对象关系映射)框架,专为.NET设计。它通过扩展IDbConnection接口,使开发者能够方便地执行SQL查询,并将查询结果映射到对象模型中。类似于ADO.NET。
2025-11-06 19:38:27
965
原创 .NetCoreMVC 开发网页使用sass
开发时实时修改(如果配置了实时监听):在 Program.cs 里加了 builder.Services.AddSassCompiler();后,修改 .scss 文件并保存,会立即自动重新编译,刷新网页就能看到效果(不用重新构建项目)。4.你只需要在网页里引用生成的 CSS(比如 <link href="~/css/style.css" ...>)就行了。如果你还有其他地方的.scss文件,可以在"Compilations": [ ]中指定。例子:我只有Styles下的variable.scss文件。
2025-11-01 23:13:23
239
原创 C#使用SQLite出错:Unable to load DLL ‘e_sqlite3‘ or one of its dependencies: 找不到指定的模块(0x8007007E)
解压出来,把sqlite3.dll重命名为e_sqlite3.dll。System.Data.Sqlite2.0.2错误。重新运行就行,不用选择x64,复制到你的调试发布目录。
2025-10-31 14:41:58
604
原创 Autofac的使用
set;// 情况1:未指定 ServiceKey(ServiceKey 为空)// 只读模式:解析键为 "_slave" 的服务,并传入 "readOnly: true" 的命名参数?// 非只读模式:直接解析参数类型对应的服务(不指定键)// 情况2:指定了 ServiceKey// 只读模式:解析键为 "ServiceKey_slave" 的服务(如 ServiceKey 是 "OrderDB",则键为 "OrderDB_slave")?
2025-10-30 01:32:18
789
原创 MVVMLight
这个不建议用了,请学习Mvvmtookit或者Prism如果你安装Mvvmlight,生成两个文件,一个MainViewModel.cs可以作为MainWindow的viewModel,另一个ViewModelLocator.cs作为ViewModel定位器,通过Ioc容器,在改文件中获取ViewModel的实例。打开ViewModelLocator.cs文件,发现文件中有报错,这时只需要删除using Microsoft.Practices.ServiceLocation;
2025-10-17 18:07:05
445
原创 wpf资源字典
绑定情况下,在控件模版里可以绑定相对源RelativeSource={RelativeSource TemplatedParent}Pack URI 写法可以避免一定情况下,资源找不到。
2025-10-14 02:14:20
133
原创 WPF自定义路由事件
/ 2. 事件包装器(名称与注册的事件名称一致)4. 定义依赖属性(通常与属性变化事件配套)// 3. 定义依赖属性(属性变化的源头)// 依赖属性标识符"MyValue", // 属性名称typeof(int), // 属性类型typeof(MyCustomControl), // 所属类型// 默认值和变化回调// 4. 属性变化回调(触发事件的地方)// 旧值// 新值// 触发路由事件,传递旧值和新值-- XAML中使用 -->// 后台代码处理事件。
2025-10-13 00:22:16
507
原创 wpf动画关键帧
1、线性关键帧动画。命名:Linear+数据类型+KeyFrame2、离散的关键帧动画。命名:Discrete+数据类型+KeyFrame3、缓动关键帧。命名:Easing+数据类型+KeyFrame4、样条关键帧动画。命名:Spline+数据类型+KeyFrame。
2025-10-12 03:31:20
237
原创 PLC速成
PLC的M引脚SM0.0 = 1 常闭SM0.1 = 一运行常开点闭合一个扫描周期再断开。SM0.5 = 1s开关转换一次plc-1200M1.2=1 常开闭合,有电M1.3=0 常开断开。
2025-10-02 00:37:06
219
原创 C# 中Byte类型转化问题
我们常常用{Byte[1],Byte[0]}转成short,和ushort,其实这俩一样,最后都用到了BitConverter.ToInt16(Byte[], 0);但是我们发现,对于0x12,用发送方用大端模式,我们接收到Byte[] {00,12},然后要反转变成{12,00},这样才能BitConverter.ToInt16转化正确。所以这样把传入byte数组高索引存高位,这样通过ToInt16,才能正确转化。但是计算机底层是 高位<-------------低位。当然,ToInt32也一样。
2025-09-28 12:10:08
138
原创 上位机Modbus协议
0区-线圈状态 (读写) 单个bit 00001至09999 1区-输入线圈 (只读) 单个bit 10001至199994区-保持型寄存器 (读写) 16位 40001至49999 3区-输入寄存器 (只读) 16位 30001至39999功能码线圈状态 (01-读取,05-单写,15-多写)输入线圈 (02-读取)保持型寄存器 (03-读取,06-单写,16-多写)输入寄存器 (04-读取)
2025-09-24 23:58:46
538
原创 异步方法在C#中的使用
不可以直接调用 MessageBox.Show,否则会大概率抛出跨线程操作异常,异常是在 Task.Run 内部抛出的 ——Task.Run 会将任务调度到 ThreadPool 线程(非 UI 线程) 执行,因此 catch 块的执行上下文默认是这个非 UI 线程。如果直接在非 UI 线程调用MessageBox.Show,相当于在非 UI 线程创建 / 操作 UI 控件,违反了 WinForms 的 “UI 控件必须由创建它的线程访问” 的规则,必然触发跨线程异常。
2025-09-21 22:56:56
322
原创 Git的使用
git init 初始化本地仓库git add . 全部提交到暂存区git commit -m "修改了bug" 提交到本地厂库git status 查看修改状态options-all 显示所有--pretty=oneline 将提交信息显示未一行--abbrev-commit 使得输出的commitId更短--graph 以图形式显示版本回退如果想获得回退前版本覆盖的记录git reflog分支查看本地分支git branch创建分支git branch 【分支名】
2025-09-12 17:35:39
664
原创 AutoMapper详解
适用于属性字段太多,且有规律时,减少映射规则的编写下面的代码我都验证了,确实是这样的//对 Source→Destination 的映射,验证目标成员(目标的所有成员必须被映射)//源有A1,A2 目标有A1,A2,A3,A4 --A3,A4没有被源进行映射,报错// 对 Source→Destination 的映射,验证源成员(源的所有成员必须被映射)//源有A1,A2,A3,A4,A5 目标有A1,A2,A3 --源的A4,A5 没有进行映射,报错。
2025-09-05 04:00:17
1228
原创 WPF里的几何图形Path绘制
IsLargeArc 为true选择大的那个圆弧,否则选择小的SweepDirection="Clockwise" 选择顺时针的路线,为CounterClockwise则是逆时针</Path></Path></Path></Path>
2025-09-03 23:27:53
652
原创 .NetCore MVC
/ 作用于所有包含 "my-id" 属性的 <div> 标签// 作用于所有以 "my:" 为前缀的标签(如 <my:card>)视图组件传参区域保持一致mvc的视图注入在 ASP.NET Core 中将依赖项注入到视图 | Microsoft Learn。
2025-09-02 01:31:03
449
原创 Sqlsugar补充自定义模板
注意SettingPropertyTemplate可能和IsCreateAttribute存在冲突一般不要一起使用,因为这俩都是向实体类属性上添加特性的。db.DbFirst/*修改old值替换*/ })//类构造函数/*修改old值替换*/ })//实体类追加引用SqlSugar,})/*修改old值替换*/}) //属性备注//属性:新重载 完全自定义用配置//[SettingClassTemplate]-------------自定义类模板(添加基类和接口)
2025-09-01 15:39:21
330
原创 CommunityTookit.MVVM
这是一个特殊的消息类型。如果 Send 方法发送的是这个类(或它的子类),那么 Send 方法将拥有一个返回值,这个返回值就是消息的接收者回复的消息。此时,消息的接收者也能够通过消息上的 Reply 方法回复消息的发送者。ValueChangedMessage 是一个最基本的消息类型,它包含一个 Value 属性,用于存储消息的值。注册一个含有函数的参数类型为T的消息接收者,发送这个参数类型供接受者调用对其使用。此外,还可以继承这个类,从而实现自己的消息类型。Messager先导。
2025-09-01 01:27:02
370
原创 Mysql(存储过程)
存储过程是事先经过编译并存储在数据库中的一段 SQL语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。
2025-07-21 22:41:39
1289
原创 Mysql(视图)
视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。通俗的讲,视图只保存了查询的SQL逻辑,不保存查询结果。所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上。语法。
2025-07-21 00:21:28
747
原创 Mysql(事务)
执行事务相关命令四大特性ACID原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败一致性(Consistency):事务完成时,必须使所有数据都保持一致状态隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。
2025-07-20 18:31:03
409
原创 Mysql(运维-主从复制)
概述:主从复制是指将主数据库的DDL和 DML操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持。记下File和Position的值.执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化。两个关键进程: 上面两个参数都是Yes,则说明主从配置成功!加\G是把行变为列展示。3.5 执行FLUSH PRIVILEGES;
2025-07-20 16:39:24
190
原创 Mysql(运维-日志)
二进制日志(BINLOG)记录了所有的 DDL(数据定义语言create)语句和 DML(数据操纵语言,增删改)语句,但不包括数据查询(SELECT、SHOW)语句。
2025-07-20 13:01:52
982
原创 MicroService(Ocelot)
// 向缓存中去缓存数据--会调用这个方法//{//});/// 添加缓存, 如果有历史缓存, 就覆盖/// 清除缓存的数据= nullelseset;set;set;Program里添加AddandDelete和ClearRegion需要你自己调用,用于清除脏数据Add方法在Get方法返回null调用。/// 通过注入的一段逻辑---就是在IOC注册的时候, 指定的策略的规则/// 锁//内部自己注册的ioc的/// 决定负载均衡的策略。
2025-07-16 17:51:22
396
原创 dotnet使用Hangfire
这是Hangfire官方在github的数据库mdf文件以及源码地址。OK,到这如果是小白的话可能会懵逼,让我们现在捋捋。2在sqlserver里运行以下sql脚本,生成数据库。封装一下TestJobService.cs。官方1.8.2就是9,就写9,运行下面代码。并且执行情况都在数据库 Job表记录了。1下载nuget包。
2025-07-07 02:37:26
362
原创 dotnet 使用QuartZ
主要作用就是为了排除Trigger中一些特定的时间节点。使用方法 ,用DailCalendar举例。现在介绍一下Trigger触发的策略。
2025-07-04 18:58:00
365
原创 EFcore不使用外键方法
迁移文件类的AddMigration和DropMigration全都不见了nice。重写MigrationsModelDiffer。在program.cs里配置。
2025-03-17 00:50:17
458
原创 EFcore不使用外键,处理一对多关系
现在企业中,以阿里的开发标准,不需要有外键,使用Efcor codefirst后,数据库自动有外键配置,需要手动删除,把外键id也重新设置可为空,意思是 部门表 left join员工表 找到部门id为符合条件后删除部门,然后置对应员工的DepartmentId为null。因为EFCore为保证数据一致性,如果你使用外键,当你删除部门时会带着该部门员工一起删除。把代码改成当删除部门id为1的科研部,同时删除该部门下的员工,看看是否成功。下面,程序返回了两端sql,意思是啥呢。实验一下,以id删除部门。
2025-03-16 14:36:20
632
原创 .NetMVC或者webApi使用日志插件 Log4Net 写入数据库 Mysql
-<appender-ref ref="mysqlAppender" />-->//你们可以先把数据库的给注释掉,先配置文件写入,如果不注释可能报错。<appender-ref ref="mysqlAppender" />去掉注释。这三个是对应的创建的3个附加器,ref=创建的附加器的名字,这样配置才有效。//能看懂就行,用的时候复制就行这是log4net官网地址。3.对于MVC或者webapi里的Program.cs。4.Controller里添加测试代码。创建一下,数据库名是test_db。
2025-01-05 16:02:52
476
原创 app.Services.GetRequiredService怎么用
因此,你应该确信服务已经被正确注册,否则应该考虑使用 `GetService()`,它会在找不到服务时返回 `null`。`app.Services.GetRequiredService()` 是用来从 ASP.NET Core 中的依赖注入 (DI) 容器中获取服务实例的方法。当你在一个类中需要访问另一个服务时,通常的做法是在构造函数中注入该服务。然而,在某些情况下,你可能需要在运行时动态地获取一个服务,这时候就可以使用 `GetRequiredService()` 方法。
2024-10-18 10:25:34
863
原创 dotnet webapi使用sqlsugar
SqlSugarClient 每次请求new一个新对象,db禁止跨上下文使用,IOC建议用Scope或者瞬发注入。原生ioc注册官网有,自己看去。
2024-10-02 09:20:15
493
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅