自研WPF插件系统(沙箱运行及热插拔)
前言插件化的需求主要源于对软件架构灵活性的追求,特别是在开发大型、复杂或需要不断更新的软件系统时,插件化可以提高软件系统的可扩展性、可定制性、隔离性、安全性、可维护性、模块化、易于升级和更新以及支持第三方开发等方面的能力,从而满足不断变化的业务需求和技术挑战。 一、插件化探索 在WPF中我们想要开发一个插件化的程序通常有两种选择,一种是MEF,另一种是MAF,它们有自己的优势和劣势,下面我们来分析一下。 1.1 MEF(Managed Extensibility Framewk) 优点:
不一样的WPF多语言切换方案
前言作为技术而言,我并不认为多语言有什么值得深入研究的地方,本来也没打算开这个话题。前段时间看到了群里有朋友在讨论这个,一想到它确实也算一个比较常用的功能,所以决定对它做一个封装,如果您正好需要,希望对您有帮助。多语言切换一般有两种方案,一种是使用资源字典(xaml文件)来实现,还有一种是资源文件(resx文件)来实现,xaml文件的方式优点是比较简单,只要替换掉原来的xaml文件就可以实现在运行中切换语言,resx的方式优点是它是官方的推荐方案,很多第三方库都是使用的这种方案,但是它的缺点很明显,那就是
在Windows Server 2008 R2上运行.Net 8应用
在Windows Server 2008 R2上运行. 8程序 因为工作需要,要在客户的Windows Server 2008 R2上运行一个WinFm程序。在网上搜了下之前也有人成功运行过. Ce 3、. 6的Asp. Ce服务,遂直接拿. 8来写了。最后装了3个补丁包之后,也是成功运行。这篇笔记主要记录这3个补丁包。 Windows Server 2008 R2 SP1(KB976932) 这是个大补丁包,包含了很多更新,可以说是必装的。 链接 VC_redist.x64 是个MSVC的库。 链接 K
RabbitMQ的基本用法
RabbitMQ是一个实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。它使用Erlang语言编写,并广泛用于分布式系统、微服务架构、大数据处理等领域。RabbitMQ的基本用法涉及几个核心概念,包括消息(Message)、消息队列(Queue)、交换器(Exchange)、绑定(Binding)和网络连接(Connection)。 以下是RabbitMQ的基本用法概述:安装和配置:安装Erlang:RabbitMQ是用Erlang语言编写的,因此在安装RabbitMQ之前需要
dotnet 设置 X11 建立窗口之间的父子关系
在 X11 里面有和 Win32 类似的窗口之间的关系机制,如 OwnerOwned 关系,以及 ParentChild 关系。本文将告诉大家如何进行设置以及其行为本文将大量使用到 new bing 提供的回答内容,感谢 new bing 人工智能提供的内容 OwnerOwned 关系在这种关系中,一个窗口可以被另一个窗口拥有(owner)。 被拥有的窗口永远显示在拥有它的那个窗口的前面。 当所有者窗口最小化时,它所拥有的窗口也会被隐藏。 当所有者窗口被销毁时,它所拥有的窗口也会被销毁。 当子窗口最小化时
.NET实现获取NTP服务器时间并同步(附带Windows系统启用NTP服务功能)
对某个远程服务器启用和设置NTP服务(Windows系统) 打开注册表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 将 Enabled 的值设置为 1,这将启用NTP服务器功能。防火墙开放UDP 123端口打开“服务”应用(可以在开始菜单搜索“服务”),找到“Windows Time”服务。右键点击“Windows Time”服务,选择“重启”。执行以下命令来配置服务器模式并重启时
C# 程序集、模块和类型概念及关系
目录C# 程序集、模块和类型概念及关系概述程序集模块类型程序集、模块和类型的关系总结引用 C# 程序集、模块和类型概念及关系 概述在 C# 中,程序集、模块和类型是构成 . 应用程序的基本单元。它们之间具有以下层次关系:程序集 是包含 . 代码的单元,它可以是一个可执行文件(EXE)或一个动态链接库(DLL)。 模块 是程序集中的逻辑单元,它通常对应一个 .cs 源文件。 类型 是程序集或模块中定义的代码结构,它代表一种实体或行为。程序集 程序集是 . 应用程序的基本构建块。它包含以下元素:类型:程序集中
NETCore中实现一个轻量无负担的极简任务调度ScheduleTask
至于任务调度这个基础功能重要性不言而喻大多数业务系统都会用到世面上有很多成熟的三方库比如QuartzHangfireCavel 这里我们不讨论三方的库如何使用 而是从0开始自己制作一个简易的任务调度如果只是到分钟级别的粒度基本够用 技术栈用到了:BackgroundService和NCrontab库 第一步我们定义一个简单的任务约定不干别的就是一个执行方法:public interface IScheduleTask{Task ExecuteAsync()}public abstract class Sc
EAV模型(实体-属性-值)的设计和低代码的处理方案(2)--数据的查询处理
我在随笔《EAV模型(实体属性值)的设计和低代码的处理方案(1)》中介绍了一些基本的EAV模型设计知识和基于Winfm场景下低代码(或者说无代码)的一些实现思路,在本篇随笔中,我们来分析一下这种针对通用业务,且只需定义就能构建业务模块存储和界面的解决方案,其中的数据查询处理的操作。 1、数据的列表展示界面 在一个页面模块中,列表界面往往是我们的入口界面,其中包含一些查询条件,数据展示,以及如新建、导入、导出、编辑等功能的入口,如下是我们常规的系统界面,使用固定的表字段来创建的常规化界面。这个模块是一个标
如何基于surging架设流媒体视频推流(视频讲解)
前言 随着直播行业大火,各种直播类产品和产品层出不穷,能够满足各方人员的需求和互动,也使得斗鱼、虎牙、抖音都随着直播业的大火而欣欣向荣, 大家也对直播平台了解不少,也参与使用,但是怎么样才能研发出视频直播平台呢?那么针对于这个问题就是我今天想给大家讲解的一些东西,首先要对直播协议有所了解,然后怎么样使用作者研发的surging 去搭建直播平台,首先接下来,我就给大家简单介绍下常见的直播协议。 视频培训地址:https:pan.baidu.coms13iOJlRnpsknm7NG6booUUw 社区版
WPF使用Shape实现复杂线条动画
看到巧用 CSSSVG 实现复杂线条光效动画的文章,便也想尝试用WPF的Shape配合动画实现同样的效果。ChokCoco大佬的文章中介绍了基于SVG的线条动画效果和通过角向渐变配合 MASK 实现渐变线条两种方式。WPF中的Shape与SVG非常相似,因此这种方式也很容易实现。但WPF中仅有的两种渐变画刷不包含角向渐变,本文使用了另外两种方式实现同样的效果。在Avalonia的API文档中有看到ConicGradientBrush,应该可以用角向渐变的方式来实现。首先看一下三种方式实现的效果(录制的gi
dotnet X11 窗口之间发送鼠标消息 模拟鼠标输入
本文记录我阅读 Avalonia 代码过程中所学习到的在 X11 的窗口之间发送鼠标消息,可以跨进程给其他进程的窗口发送鼠标消息,通过此方式可以实现模拟鼠标输入直接使用 XSendEvent 给指定窗口发送消息即可,如以下示例代码var xEvent = new XEvent{MotionEvent ={type = XEventName.MotionNotifysend_event = truewindow = Windowdisplay = Displayx = xy = y}}XSendEvent(
C#TMS系统学习(联表报表)
C#TMS系统代码联表报表学习 领导被裁了之后很快就有人上任了,几乎是无缝衔接,很难让我不想到这早就决定好了。我的职责没有任何变化。感受下来这个系统封装程度很高,我只要会调用方法就行。这个系统交付之后不会有太多问题,更多应该是做小需求,有大的开发任务应该也是第二期的事,嗯?怎么感觉我变成运维了?而且为啥没有技术主管来把把关呢?做好了之后我就直接接手了 还有另外一个PLM系统还没有开发好,只能先着手这个了,不然天天看上去没事做 whatcanisay 费用结算查询客户汇总 统计客户 的 发货单寄递单 产生的
C#异步Task
目录C#异步Task概述异步是什么?为什么需要异步?基本语法1. Task创建执行2. Task异步方法3. 取消异步执行CancellationTokenSource4.Task并行数量控制LimitedConcurrencyLevelTaskScheduler常见的应用场景总结引用 C#异步Task 概述 异步是什么?为什么需要异步?使用多线程的目的其实即使为了实现异步+并行,异步:是相对同步的,同步就是一个流程安装一个流程执行完毕,异步就是在不影响主流程的执行同时,可以执行其他流程,这也就是达到了几
数据库升级PostgreSql+Garnet
目录前言PostgreSql安装测试额外Nuget安装Person.cs模拟运行Navicate连postgresql解决方案Gar为什么要选择Gar而不是RedisRedis不再开源Windows版的Redis是由微软维护的Windows Redis版本老旧,后续可能不再更新Gar性能强于Redis安装测试安装可视化工具C# 代码连接测试总结 前言 我公司用的是sql server 2008的破解版,但是现在毕竟是2024年了,打算上最新最强的免费数据库。而且我公司的项目连redis都没用过,我打算测试
.NET 6 Entity Framework Core Db First(1) 创建模型
项目准备 1、开发环境vs2022 .6 2、创建项目新建项目 ASP. Ce Web API,解决方案名称:EFDBFirstDemo,项目名称:EFDBFirstDemo.API,选择. 6.0 解决方案=》新建项目=》类库,类库名称:EFDBFirstDemo.Model,选择. 6.0安装 EF Ce 安装方式使用程序包管理控制台。打开方式:工具=》NuGet包管理器=》程序包管理控制台。使用方法:https:learn.microsoft.comzhcnnugetconsumepackages
Advanced .Net Debugging 8:线程同步
一、介绍 这是我的《Advanced . Debugging》这个系列的第八篇文章。这篇文章的内容是原书的第二部分的【调试实战】的第六章【同步】。我们经常写一些多线程的应用程序,写的多了,有关多线程的问题出现的也就多了,因此,最迫切的任务就是提高解决多线程同步问题的能力。这一节我们将从本质上、从底层上来介绍线程的同步组件和同步原理,也会给出在多线程环境下如何解决问题的最佳实践。高级调试会涉及很多方面的内容,你对 . 基础知识掌握越全面、细节越底层,调试成功的几率越大,当我们遇到各种奇葩问题的时候才不
【OpenVINO™】在 C# 中使用OpenVINO™ 部署PP-YOLOE实现物体检测
前言OpenVINO™ C# API 是一个 OpenVINO™ 的 . wrapper,应用最新的 OpenVINO™ 库开发,通过 OpenVINO™ C API 实现 . 对 OpenVINO™ Runtime 调用,使用习惯与 OpenVINO™ C++ API 一致。OpenVINO™ C# API 由于是基于 OpenVINO™ 开发,所支持的平台与 OpenVINO™ 完全一致,具体信息可以参考 OpenVINO™。通过使用 OpenVINO™ C# API,可以在 .、. Framewk等
.Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 发布到 Win7+
.8.0 Blaz Hybird 桌面端 (WPFWinfm) 实测可以完整运行在 win7sp1win10win11. 如果用其他工具打包还可以运行在maclinux下 传送门BlazHybrid 发布为无依赖包方式安装 WebView2Runtime 1.57 MB或136 MB测试DEMO发布为依赖包方式安装 WebView2Runtime 1.57 MB或136 MB 依赖环境版本还需安装这两个程序 8 55.7 MB 和 aspce8 9.94 MB测试DEMOWin7 必备条件win7 sp1
推荐一个好用的.net开发框架
企业应用开发平台(Enterprise Develop Platfm),以下简称EDP。EDP是一套集完整组织架构,全面权限体系,以及各类基础功能于一体的基于.的企业应用开发平台。其最大的特点是将复杂的数据行列权限的实现通过简单且友好的编码方式面向开发人员,同时EDP还提供了全面的系统基础管理功能,以便系统的运行和维护。 EDP是一套集组织架构,权限框架【功能权限,操作权限,数据访问权限,WebApi权限】,自动化日志,动态Interface,WebApi管理等基础功能于一体的,基于.的企业
C#委托
目录C# 委托委托是什么?基本语法委托的常见用法总结引用 C# 委托 委托是什么? 委托定义一种类型,该类型封装一个或多个方法(一个或多个方法指向委托实例)。 委托是一种指向方法的引用。它允许您将方法存储在变量中,并像调用普通方法一样调用它们。委托通常用于事件处理 和异步编程。 基本语法定义委托类型。 public delegate 返回值类型 委托名(参数类型列表)private delegate string MyDelegate(string str)创建委托实例(变量)。 委托类型 委托变量
在 WPF 中集成 ASP.NET Core 和 WebView2 用于集成 SPA 应用
背景 我们有些工具在 Web 版中已经有了很好的实践,而在 WPF 中重新开发也是一种费时费力的操作,那么直接集成则是最省事省力的方法了。 思路解释为什么要使用 WPF?莫问为什么,老 C# 开发的坚持,另外因为 Windows 上已经装了 Webview2edge 整体打包比 electron 小很多,release 后的体积主要是 ASP. Ce 的文件。 为什么要使用 ASP. Ce 进行代理呢?很简单,因为很多操作要求使用 HTTP Context,在类似 file: 的链接下是不能使用的,如果做
C# 实现Ping远程主机功能
C#实现Ping远程主机功能。 1、引用nuget包 Wesky..OpenTools OpenTools是一个用于提高开发效率的开源工具库。该项目为个人开源项目,采用MIT开源协议,永不更改协议。开源项目地址: Gitee:https:gitee.comdreamer_jopentools.gitGithub:https:github.comLittleLittleRobotOpenTools.git个人公众号:Dot Dancer工具更新说明:1.0.1 提供AES加密解密功能1.0.2 提供本地
gRPC入门学习之旅目录
gRPC入门学习之旅(一) gRPC入门学习之旅(二) gRPC入门学习之旅(三) gRPC入门学习之旅(四) gRPC入门学习之旅(五) gRPC入门学习之旅(六) gRPC入门学习之旅(七) gRPC入门学习之旅(八)
WPF 稳定的全屏化窗口方法
本文来告诉大家在 WPF 中,设置窗口全屏化的一个稳定的设置方法。在设置窗口全屏的时候,经常遇到的问题就是应用程序虽然设置最大化加无边框,但是此方式经常会有任务栏冒出来,或者说窗口没有贴屏幕的边。本文的方法是基于 Win32 的,由 lsj 提供的方法,当前已在 1000 多万台设备上稳定运行超过三年时间,只有很少的电脑才偶尔出现任务栏不消失的情况本文的方法核心方式是通过 Hook 的方式获取当前窗口的 Win32 消息,在消息里面获取显示器信息,根据获取显示器信息来设置窗口的尺寸和左上角的值。可以支持在
gRPC入门学习之旅(八)
gRPC入门学习之旅(一) gRPC入门学习之旅(二) gRPC入门学习之旅(三) gRPC入门学习之旅(四) gRPC入门学习之旅(五) gRPC入门学习之旅(六) gRPC入门学习之旅(七) 3.7、添加proto协议文件 1.将服务端项目Demo.GrpcService中的Protos目录中的Grpc协议文件复制过来,如下图所示: 2.在Visual Studio 2022的解决方案资源管理器中,使用鼠标左键双击项目Demo.Grpc.Client,在文本编辑器中打开项目文件,并进行编辑
Kingbase+sqlsugar 携手助力医疗国产化替换 【人大金仓 .NET ORM】
1. 案例 成某三甲医预约系统, 该项目在2024年初进行上线测试,在正常运行了两天后,业务系统报错:The connection pool has been exhausted either raise MaxPoolSize (currently 800) Timeout (currently 15 seconds)。金仓开发人员跟进分析,具体排查步骤如下: 1.1 是否是高并发导致的问题 首先是对业务系统进行了梳理,用户业务系统图如下: 通过对用户现场业务系统的分析,错误是业务系统报出的,业
C#动态查询:巧用Expression组合多条件表达式
概述:在C#中,通过`Expression`类、`Also`和`Else`方法可组合两个`ExpressionFuncT bool`,实现多条件动态查询。通过创建表达式树,可轻松构建复杂的查询条件。 在C#中,可以使用Also和Else方法组合两个ExpressionFuncT bool类型的表达式。以下是详细解释和实例源代码: 方法和步骤:使用Expression类创建表达式树。 使用Also和Else方法组合两个表达式。详细实例源代码: using System using System.Linq.E
在Biwen.QuickApi中整合一个极简的发布订阅(事件总线)
闲来无聊在我的Biwen.QuickApi中实现一下极简的事件总线其实代码还是蛮简单的对于初学者可能有些帮助 就贴出来有什么不足的地方也欢迎板砖交流~ 首先定义一个事件约定的空接口public interface IEvent{}然后定义事件订阅者接口 public interface IEventSubscriberT where T : IEvent{Task HleAsync(T @event CancellationToken ct) summary 执行排序 summaryint der { g
C#TMS系统学习(ShippingNotice页面)
C#TMS系统代码业务页面ShippingNotice学习 学一个业务页面,ok,领导开完会就被裁掉了,很突然啊,他收拾东西的时候我还以为他要旅游提前请假了,还在寻思为什么回家连自己买的几箱饮料都要叫跑腿带走,怕被偷吗?还好我在他开会之前拿了两瓶芬达 感觉感觉前面的BaseCity差不太多,这边的分页查询复杂一点,其他的当个加强记忆了 Service页面 跟BaseCity页面的差不多 [ApiDeionSettings(Tag = "Business" Name = "ShippingNotice" d