<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[SQWH_SSGS的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/SQWH_SSGS</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; SQWH_SSGS]]></copyright><item><title><![CDATA[Avalonia的自定义边框窗口]]></title><link>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/149725894</link><guid>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/149725894</guid><author>SQWH_SSGS</author><pubDate>Mon, 28 Jul 2025 21:55:12 +0800</pubDate><description><![CDATA[在做桌面软件时，我们大部分情况都不会使用系统自带的边框，基本上都是自己定制的。本文在Avalonia中实现自定义边框窗口。]]></description><category></category></item><item><title><![CDATA[WPF的一些基础知识学习记录]]></title><link>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/149585076</link><guid>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/149585076</guid><author>SQWH_SSGS</author><pubDate>Wed, 23 Jul 2025 23:02:51 +0800</pubDate><description><![CDATA[路由事件(Routed Event)是WPF事件系统的核心，它允许事件在元素树中传播，而不仅仅局限于引发事件的对象。]]></description><category></category></item><item><title><![CDATA[一些Avalonia与WPF内容的对应关系和不同用法]]></title><link>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/149549976</link><guid>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/149549976</guid><author>SQWH_SSGS</author><pubDate>Tue, 22 Jul 2025 23:02:07 +0800</pubDate><description><![CDATA[WPF与Avalonia对比]]></description><category></category></item><item><title><![CDATA[记录一个C#/.NET的HTTP工具类]]></title><link>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/148949714</link><guid>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/148949714</guid><author>SQWH_SSGS</author><pubDate>Fri, 27 Jun 2025 11:38:44 +0800</pubDate><description><![CDATA[摘要：本文展示了一个C#/.NET的HTTP工具类HttpClientHelper，封装了常用的HTTP请求方法。主要功能包括：1) HttpGet方法发送GET请求并返回泛型结果；2) HttpPost方法发送POST请求并返回泛型结果；3) HttpPostX和HttpGetX方法支持带Token的请求。类中使用了HttpClient进行网络请求，设置30秒超时，并利用Serilog记录日志。返回结果支持JSON反序列化，当请求失败时会返回默认值或HttpResult对象。代码已处理常见的网络异常情况。]]></description><category></category></item><item><title><![CDATA[BlockingCollection实现生产者消费者模式]]></title><link>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/148421298</link><guid>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/148421298</guid><author>SQWH_SSGS</author><pubDate>Wed, 04 Jun 2025 10:43:14 +0800</pubDate><description><![CDATA[说明：只有调用collection.CompleteAdding()，且collection为空时，consumerTask才可能终止；否则，因为collection.GetConsumingEnumerable()的无限迭代，consumerTask将无法终止。如果某线程确定需要持续后台运行，则可不调用collection.CompleteAdding()。如上代码，在生产者完成添加后，主动调用 CompleteAdding()，当消费者消费所有内容后，则会自动退出。]]></description><category></category></item><item><title><![CDATA[C#通过NTP服务器获取NTP时间]]></title><link>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/147548014</link><guid>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/147548014</guid><author>SQWH_SSGS</author><pubDate>Sun, 27 Apr 2025 09:41:47 +0800</pubDate><description><![CDATA[获取到的时间，如果需要自己进行时区转换，可以通过C#代码从电脑本机获取到标准的时区列表，然后将获取到的NTP时间加上时区的BaseUtcOffset，即可转换到所需要的时区时间。]]></description><category></category></item><item><title><![CDATA[ASP.NET Core学习——IHostService]]></title><link>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/145905068</link><guid>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/145905068</guid><author>SQWH_SSGS</author><pubDate>Thu, 27 Feb 2025 15:21:08 +0800</pubDate><description><![CDATA[IHostedService 的生命周期是与应用程序的生命周期相匹配的。它会在应用启动时启动，并在应用关闭时停止。它是一个持久的后台服务，与应用请求的生命周期无关。比如，在你的ASP.NET Core程序中，除原有的web api接口外，需要另外开启一个TCP Server，该服务在整个程序运行过程中都保持通讯，则可以使用。它通常用于实现后台任务、定时任务或任何需要在应用程序生命周期内运行的长期任务。例如，后台工作者线程、消息队列的监听、定时事件等。长时间运行的任务或异步作业。]]></description><category></category></item><item><title><![CDATA[记一次Ngnix配置]]></title><link>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/145715761</link><guid>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/145715761</guid><author>SQWH_SSGS</author><pubDate>Tue, 18 Feb 2025 21:53:56 +0800</pubDate><description><![CDATA[假设一个服务器中有一个公网IP、一个内网IP，另外已经部署好后台服务的接口地址为http://内网ip:8088。]]></description><category></category></item><item><title><![CDATA[Prism的Region、Module及其应用]]></title><link>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/145715069</link><guid>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/145715069</guid><author>SQWH_SSGS</author><pubDate>Tue, 18 Feb 2025 21:22:07 +0800</pubDate><description><![CDATA[在Prism中，可以使用XAML或代码创建定义Region<Grid></Grid></Window>]]></description><category></category></item><item><title><![CDATA[Prism注册和获取实例（IContainerRegistry和IContainerProvider）]]></title><link>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/145559934</link><guid>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/145559934</guid><author>SQWH_SSGS</author><pubDate>Mon, 10 Feb 2025 22:51:08 +0800</pubDate><description><![CDATA[通常是：每次请求都创建一个新的实例，但每个请求内只有一个实例，如在Web应用中，作用域通常指的是一个HTTP请求。服务的生命周期在特定的作用域内，每次进入新作用域时会创建一个新的实例，而同一作用域内的多个请求会共享该实例。：Prism框架中，用于注册和配置应用程序中的依赖注入（DI）容器的接口。在容器中注册一个单例服务，在整个应用程序生命周期内只创建一个实例，并且这个实例在所有需要它的地方共享。从容器中获取实例时，只在第一次获取实例时会创建一次，之后所有请求该服务的地方都返回同一个实例。]]></description><category></category></item><item><title><![CDATA[bat脚本获取Windows的系统管理员权限并执行脚本]]></title><link>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/137020222</link><guid>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/137020222</guid><author>SQWH_SSGS</author><pubDate>Mon, 25 Mar 2024 17:22:08 +0800</pubDate><description><![CDATA[【代码】bat脚本获取Windows的系统管理员权限并执行脚本。]]></description><category></category></item><item><title><![CDATA[【WPF学习笔记】WPF 中使用附加属性解决 PasswordBox 的数据绑定问题]]></title><link>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/129868943</link><guid>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/129868943</guid><author>SQWH_SSGS</author><pubDate>Thu, 30 Mar 2023 22:58:47 +0800</pubDate><description><![CDATA[在 WPF 开发中 View 中的数据展示我们常通过 Binding 进行绑定。绑定的目标只能是依赖属性。而 PasswordBox  控件中的 Password 并不是一个依赖属性，所以我们在使用 Password 时无法直接进行数据绑定。为了解决这个问题，我们就需要自己定义依赖属性。标题中的  “附加属性” 是依赖属性的一种特殊形式。]]></description><category></category></item><item><title><![CDATA[三层架构、MVC、前后分离的一些知识]]></title><link>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/129868706</link><guid>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/129868706</guid><author>SQWH_SSGS</author><pubDate>Thu, 30 Mar 2023 22:43:29 +0800</pubDate><description><![CDATA[前端的UI层，只是知道DTO的存在，同时前端需要的数据都在一个DTO中，这样，每次调用服务层的时候，只需要调用一次就可以完成所有的业务逻辑操作，而不是原来的直接调用业务逻辑层那样的，需要调用多次，对于分布式场景下，减少服务调用的次数，尤其重要。MVC架构是一种开发模式，与三层架构不是一个类型的概念。在实际的业务场景下，后端实现或存储的数据远比用户需要的数据要庞大和复杂，所以前端需要的数据相对来说要么是组合的，要么是抽取的，不是完整的，因为在设计数据存储格式上都会有一些额外的设计和考虑，便产生了DTO层。]]></description><category></category></item><item><title><![CDATA[面向对象的设计模式与原则]]></title><link>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/129385232</link><guid>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/129385232</guid><author>SQWH_SSGS</author><pubDate>Tue, 07 Mar 2023 16:34:39 +0800</pubDate><description><![CDATA[在面向对象的语言中，继承是必不可少的、非常优秀的语言机制。它存在非常明显优缺点。]]></description><category></category></item><item><title><![CDATA[Prism学习：Region的使用]]></title><link>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/129179163</link><guid>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/129179163</guid><author>SQWH_SSGS</author><pubDate>Thu, 23 Feb 2023 12:36:13 +0800</pubDate><description><![CDATA[在我们的日常开发中，通常会将一个页面切割成不同的部分。如下一个页面，我们可以将其划分为头部、左侧目录、页面主体三个部分。在Prism中，我们可以将这三个部分理解为三个区域（Region），而区域之中可以再细分区域。Region负责承担UI控件，其中内容并不固定，可以动态分配。Prism中Region通过RegionManager进行管理。]]></description><category></category></item><item><title><![CDATA[委托（C#入门详解学习笔记）]]></title><link>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/129171905</link><guid>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/129171905</guid><author>SQWH_SSGS</author><pubDate>Wed, 22 Feb 2023 22:25:28 +0800</pubDate><description><![CDATA[委托（delegate）可以理解为是C/C++中函数指针的”升级版“。
委托是一种类(class)，类是数据类型，所以委托也是一种数据类型。类可以声明变量、创建实例，所以委托也可以。委托的声明格式与C#中一般的类的声明格式不同，反而更像是C/C++中函数指针的声明格式。这样做主要是为了照顾可读性，并与C/C++传统保持一致。]]></description><category></category></item><item><title><![CDATA[【WPF学习笔记】WPF中使用ValidationRule自定义验证规则]]></title><link>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/113662688</link><guid>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/113662688</guid><author>SQWH_SSGS</author><pubDate>Mon, 08 Feb 2021 01:08:19 +0800</pubDate><description><![CDATA[WPF中使用ValidationRule自定义验证规则
本文主要是展示在 WPF 中使用 ValidationRule 自定义验证规则，同时展示两种错误响应方式。一种是通过 Behavior 传递到 ViewModel 中，然后进行错误信息响应；一种是直接在 View 中遍历当前也的所有错误元素，在页面中通过事件统一响应。
1、自定义验证规则类
这里自定义两个验证规则类，分别用于验证 “用户名”输入不可为空、“邮箱”输入值需满足格式要求。
两个类需要继承 ValidationRule 类。Validatio]]></description><category></category></item><item><title><![CDATA[【WPF学习笔记】WPF中动画（Animation）的简单使用]]></title><link>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/113532161</link><guid>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/113532161</guid><author>SQWH_SSGS</author><pubDate>Mon, 01 Feb 2021 23:25:15 +0800</pubDate><description><![CDATA[WPF中动画（Animation）的简单使用
动画（Animation）的部分简单属性的介绍
使用动画需要使用以下两个类：
Storyboard：创建动画需要使用故事板（Storyboard）元素，用于装载动画
XXXAnimation：具体的动画类，实现具体的动画效果;
具体的动画实现通过 XXXAnimation 中的属性实现，如下，以 DoubleAnimation 为例。不同参数类型的依赖属性需要对应使用不同的 动画类。
From：动画的起始值
To：动画的结束值。From 和 To 成对使用。
B]]></description><category></category></item><item><title><![CDATA[【WPF学习笔记】WPF中行为（Behavior）的简单使用]]></title><link>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/113529081</link><guid>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/113529081</guid><author>SQWH_SSGS</author><pubDate>Mon, 01 Feb 2021 20:40:55 +0800</pubDate><description><![CDATA[WPF中行为（Behavior）的简单使用
在我之前的 WPF 开发中，需要实现一些页面效果时，常使用到的方式就是重写元素的样式（Style），然后再样式里面设置使用元素的各类触发器（Trigger）来实现效果。这样常常需要编写大量的代码。
近日学习到 WPF 中有一个叫做 Behavior 的扩展方式，可以用来实现页面效果，实现方式更为简便。学习笔记如下：
添加需要的DLL库
要使用 Behavior 的相关功能需要先添加 “System.Windows.Interactivity” 库。可以通过 Nug]]></description><category></category></item><item><title><![CDATA[EF Core 学习笔记]]></title><link>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/111939597</link><guid>https://blog.youkuaiyun.com/SQWH_SSGS/article/details/111939597</guid><author>SQWH_SSGS</author><pubDate>Wed, 30 Dec 2020 00:03:37 +0800</pubDate><description><![CDATA[EF Core 学习笔记EF Core 学习笔记准备工作如何使用 EF Core 生成数据库设置字段属性实体间的对应关系1:n 关系m:n 关系1:1 关系数据库操作添加、查询单条数据添加批量数据库操作插入两个不同表的数据查询能完成查询的方法查询使用参数的区别模糊查询的两种方法生成 SQL 语句的顺序修改、删除删除数据修改数据更改未追踪数据添加关系型数据对比加载关联数据预加载显式加载懒加载多个多关联数据查询修改关联数据修改关联数据设置多对多关系删除多对多关系修改多对多关系设置一对一的关系执行原生的 SQL数]]></description><category></category></item></channel></rss>