
c#
lindexi_gd
我是微软Windows应用开发方向的最具价值专家,欢迎访问我博客blog.lindexi.com里面有大量WPF和UWP博客
-
原创 WPF 不禁用实时触摸而收到 WM_Touch 触摸消息方法
在 WPF 中,触摸默认通过 RealTimeStylus 实时触摸进来,根据官方文档,这个机制将会和 WM_Touch 触摸消息在同一个 HWND 是互斥的。而在 WPF 中按照机制,在没有禁用实时触摸下是不支持在窗口内收到 WM_Touch 触摸消息。因此想要在不禁用 WPF 实时触摸的情况下,获取 WM_Touch 触摸消息的一个方法是通过 WinForms 窗口来获取在不禁用 WP...2021-02-03 00:28:0517
0
-
原创 dotnet OpenXML SDK 形状的 rect Shape Text Rectangle 属性对文本框的坐标影响
在 Office 里面,对于形状,可以通过 a:rect 指定文本框的坐标2021-02-03 00:28:0516
0
-
原创 dotnet OpenXML 让 PathLst 自定义形状转 SVG 路径格式的 Geometry 内容
在 Office 文档里面,可以使用自己定制的自绘制形状,自己绘制的内容将会存放为 pathLst 也就是 List of Shape Paths 内容到文档里面。本文将告诉大家如何将 PathLst 自定义形状转换为标准的 SVG 路径,以支持在 WPF 或 UWP 中的 Path 元素作为 Geometry 显示2021-02-03 00:28:0516
0
-
原创 dotnet 读 WPF 源代码笔记 为什么默认的笔迹触摸点的压感是 0.5 的值
本文是我在读 WPF 源代码做的笔记2021-01-29 19:33:1735
0
-
原创 dotnet 读 WPF 源代码笔记 Stroke 类可能存在的内存泄露
在 WPF 中,使用 Stroke 类时,可能会出现内存泄露,原因是 DrawingAttributes 的事件被监听没有释放。本文将从源代码的角度告诉大家这个内存泄露问题和如何解决2021-01-29 19:32:2742
0
-
原创 dotnet C# 将 Byte 二进制数组使用不安全代码快速转换为 int 或结构体数组
我在写一个有趣的 WPF 应用,我会不断收到从硬件发过来的数据,这些数据被使用 Byte[] 数组进行传输。我想要使用最快的方法转换为我的 int 数组或者转换为结构体数组,此时可以使用不安全代码的方式转换2021-01-29 19:31:3032
0
-
原创 dotnet 5 静态字段和属性的反射获取 没有想象中那么伤性能
在最近在做 WPF 框架开发的时候,看到了在 WPF 的 StaticExtension 里面,有部分逻辑采用了反射的方法去获取静态字段和静态属性。此时我第一个反应就是这部分逻辑的性能有锅,于是尝试了进行加上缓存来优化。但是在使用了 Benchmark 进行性能测试的时候发现了,其实加上了缓存的性能反而更差,也就是说在 dotnet 5 里面的反射获取静态字段和属性的性能没有想象的伤性能2021-01-29 19:30:2784
0
-
原创 升级到 dotnet core 之后 HandleProcessCorruptedStateExceptions 无法接住异常
这是 dotnet core 的破坏性改动之一,在 dotnet framework 里面,可以使用 HandleProcessCorruptedStateExceptionsAttribute 接住非托管层抛出的异常,如 C++ 异常等。但是这个功能在 dotnet core 下存在行为的变更,从 .NET Core 1.0 开始,损坏进程状态异常无法由托管代码进行处理。 公共语言运行时不会将损坏进程状态异常传递给托管代码2021-01-29 19:29:0637
0
-
原创 C# dotnet 编写 curl 的用户名和密码逻辑
在使用 curl 时,可以采用 -u 加上用户名和密码,这个对应在 C# 里面也是两句话的事情。只是在 curl 里面封装好了,我通过工具人协助解决,于是就在这里记录一下2021-01-29 19:23:2031
0
-
原创 dotnet 单元测试 Mock 让一个对象继承多个接口
在使用 Mock 的时候,可以设置一个 Mock 的对象继承多个接口,而不需要自己定义一个接口去继承其他的多个接口2021-01-29 19:21:2525
0
-
原创 dotnet 读 WPF 源代码笔记 使用 Win32 方法修改窗口的坐标和大小对窗口依赖属性的影响...
咱可以使用 Win32 的 SetWindowPos 修改窗口的坐标和大小,此时 WPF 的窗口的 Left 和 Top 和 Width 和 Height 依赖属性也会受到影响,本文将会告诉大家在啥时候会同步更改 WPF 依赖属性的值,而什么时候不会本文将会用到很多 Win32 方法,在 dotnet 基金会开源了对 win32 等的调用的封装库,请看 https://github.com...2021-01-07 00:26:3063
0
-
原创 dotnet OpenXML 修复 Office 文档里面包含格式不正确的 Uri 而无法解析
在使用 OpenXML 解析 Office 文档,无论是 PPT 还是 Word 还是 Excel 文档,都会使用标准方式解析。而此时的文档如果包含了错误的 Url 格式,例如不正确的邮件名的时候,将会在解析的时候出错。本文告诉大家如何修复这个问题尽管在 Office 2016 等版本,是可以在用户端制作出格式不正确的 Url 文档,如下图所示的内容此时在执行解析的时候,将会提示如下代...2021-01-05 00:43:5555
0
-
原创 WPF 制作支持点击穿透的高性能的透明背景异形窗口
默认的 WPF 的支持点击穿透的透明背景窗口,是通过 AllowsTransparency 实现的,但是此方法的性能比较低。本文来告诉大家一个高性能的方法,通过此方法制作出来的 WPF 窗口可以获取很高的性能,设置透明和设置窗口不透明之间几乎没有性能差别本文的方法由 少珺 小伙伴提供,我只是代为整理博客。本文的方法是基于 WPF 制作高性能的透明背景异形窗口(使用 WindowChrome ...2021-01-05 00:43:55101
0
-
原创 win10 uwp 相机的分辨率设置方法
本文来告诉大家如何在 UWP 中修改相机的分辨率设置以及如何使用相机的功能在 UWP 中可以使用 WinRT 提供的 Win10 特有的 API 用来捕获摄像机的内容,支持很多格式的硬件解码,性能会比 Win32 好特别多。我使用了 UWP 版本的和 WPF 基于 DirectShow 的版本进行性能对比发现在使用 WPF 的版本,在我的设备上,大概 CPU 能到百分之十,而完全没有用到 ...2020-12-31 01:11:3072
0
-
原创 dotnet 集成测试 SmartSql 存在静态量导致多个主机启动提示 Alias 已存在
在集成测试中,我采用单个进程开启多个主机,可以理解为一个用例开启一次主机。但是在我使用到 SmartSql 的功能时,我发现在一个主机关闭之后,再开启下一个主机,会因为使用了相同的别名而提示 SmartSql.Alias:[SmartSql] already exist 错误。本文告诉大家如何解决此问题默认的 dotnet 应用在主机销毁的时候,都会销毁自己的资源。而 SmartSql 没有...2020-12-29 13:39:4935
0
-
原创 dotnet 读 WPF 源代码笔记 SafeMILHandleMemoryPressure 的作用
本文来告诉大家在 WPF 里面的 SafeMILHandleMemoryPressure 类的作用。这是一个 internal 不开放的类,是在 WPF 中和 Dx 等模块调用使用的,用途就是辅助 GC 统计当前内存情况,用来在内存不够的时候触发回收这个类放在 src\Microsoft.DotNet.Wpf\src\PresentationCore\System\Windows\Media...2020-12-26 04:48:4646
0
-
原创 WPF 最简方法使用自己定制的 WPF 框架
本文提供了一个最简的方法,可以用到整个 WPF 框架里面所有 internal 内部权限的成员的方法。这是一个我自己定制的 WPF 框架,可以在此基础上构建属于自己的定制化的 WPF 框架本文提供的方法适用于 .NET 5 和 x86 下,如果需要其他版本,请自行构建和使用,关于如何自行构建和定制化,请看 手把手教你构建 WPF 框架的私有版本现在的 WPF 属于 dotnet 基金会组织...2020-12-25 00:50:4675
0
-
原创 WPF 框架开发 加入 InternalsVisibleToAttribute 特性让其他程序集可以访问 internal 权限成员
在 WPF 框架开发中,其实很少有开发者有足够的勇气去更改现有的框架逻辑,因为 WPF 的功能十分庞大,很难测试全。更多的开发都是加功能以及开放已有功能。整个 WPF 框架的大体设计是十分好的,可以在框架里面遵循对修改关闭的原则,定制化更多的是做注入,调用 internal 权限成员 本文告诉大家如何给 WPF 框架加入 InternalsVisibleToAttribute 特性让其他程序集可以访问 internal 权限成员2020-12-25 00:50:4638
0
-
原创 dotnet C# 链表和字典的性能对比
本文来告诉大家我实际使用基准测试的在 .NET Core 3.1 的链表 LinkedList 和 Dictionary 字典的在元素增删的性能对比从算法分析上,其实字典和链表在时间上的性能是差不多的,甚至可以认为字典的速度会比链表更高。但是从空间上,如果一边增加元素一边删除元素那还是链表省空间。同时在字典空间满了之后,修改字典容量会比链表使用更多的时间以下是我用不够严谨的基准性能测试的数...2020-12-24 00:35:4059
2
-
原创 WPF 滑动修改音量控件
本文来分享一个简单的控件,滑动的时候显示音量控制条先来一张效果图这是一个特别简单的控件,代码放在github欢迎小伙伴访问我搭建了自己的博客 https://blog.lindexi.com/ 欢迎大家访问,里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是一旦发布了就不再更新如果在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎...2020-12-24 00:35:4080
2
-
原创 dotnet 读 WPF 源代码笔记 AppDomainShutdownMonitor 的设计
本文是我在读 WPF 源代码做的笔记。在 WPF 中的 AppDomainShutdownMonitor 类是一个不开放的类,这个类当前只是给 D3DImage 类使用。在 AppDomainShutdownMonitor 提供了在应用的进程或程序域关闭的时候,进行一次通知,当前是用来清理 D3DImage 类的资源在 WPF 中的 D3DImage 类是一个充满黑科技的类,这个类因为黑科...2020-12-22 00:44:2641
0
-
原创 希沃白板如何解决手机端播放课件内视频出现黑屏闪退
使用希沃白板的手机端或微信小程序端播放视频时,会受到手机和微信浏览器的限制,能播放的视频格式有限,请在制作课件时转换好视频格式才进行直播等我最近在使用希沃白板的云直播功能,希沃白板的云直播功能十分好用,特别是可以和学生互动的功能但是有一些调皮的学生告诉我,用希沃白板的微信小程序观看时会出现软件黑屏和闪退,一开始我还以为是调皮的学生在骗我,后续才发现是视频或图片的格式不兼容的问题本文可以...2020-03-28 01:36:214152
0
-
原创 dotnet 强签名下使用 InternalsVisibleToAttribute 给程序集加上友元
在 dotnet 里面,可以使用 InternalsVisibleToAttribute 特性,给程序集加上友元程序集,这样能让友元程序集访问到 internal 的程序。也就是说如果我有 A 和 B 两个程序集,我设置了 B 作为 A 的友元程序集 那么此时 B 程序集就能访问 A 程序集里面所有的 internal 成员。默认的友元设置只需要通过 InternalsVisibleToAttri...2020-12-19 00:34:0643
2
-
原创 dotnet 读 WPF 源代码笔记 启动欢迎界面 SplashScreen 的原理
本文是我在读 WPF 源代码做的笔记。在 WPF 中的启动界面,为了能让 WPF 的启动界面显示足够快,需要在应用的 WPF 主机还没有启动完成之前就显示出启动图,此时的启动图需要自己解析图片同时也需要自己创建显示窗口从 WPF 的 src\Microsoft.DotNet.Wpf\src\WindowsBase\System\Windows\SplashScreen.cs 文件可以看到 ...2020-12-21 01:09:4366
0
-
原创 dotnet 读 WPF 源代码笔记 WIC 多媒体图片处理通过 WindowsCodecs.dll 实现功能
本文是我在读 WPF 源代码做的笔记在 WPF 中,作为一个现代化的 UI 框架,自然有很多多媒体相关的事情需要处理,在 WPF 中有特别的一层是 WIC 层,这一层将包揽了大部分的多媒体图片的处理。如咱熟悉的 BitmapEncoder 类,里面就有大量调用到 WIC 的逻辑那么在 WPF 中说的 WIC 层是什么?通过 官方文档 可以了解到 WIC 就是 Windows Imagin...2020-12-21 01:09:4340
0
-
原创 dotnet 读 WPF 源代码笔记 wpfgfx_cor3.dll 是什么文件
本文是我在读 WPF 源代码做的笔记通过 WPF 的架构文档可以了解到在 WPF 里面的架构如下图这里有一层很重要的一层是 MilCore 层,这一层将会沟通 DirectX 和 托管层,而这一层在用户端的逻辑就放在 wpfgfx_cor3.dll 文件里面这个文件的命名定义可以从 src\Microsoft.DotNet.Wpf\src\Shared\RefAssemblyAttr...2020-12-21 01:09:4374
0
-
原创 dotnet OpenXML 解析 WPS 不规范的 PPT 文件的 cNvPr 重复 id 问题
在收到了反馈说有一份课件,打开解析就发现替换的元素不对,原因是这个课件里面的 Slide Master 里面存在一个元素的 id 和某个页面的元素 id 是相同的,这不符合 ECMA 376 的规范。通过读取文档的内容,发现这是 WPS 制作出来的 PPT 文件。本文做一个存档,用来告诉大家有这个坑在 Office 2016 和 Office 2019 的行为判断请看以下两篇博客dotne...2020-12-19 00:34:0651
1
-
原创 WPF 按钮 Button 的 IsEnabled 属性对 WindowChrome 的 IsHitTestVisibleInChrome 的影响
在 WPF 里面,默认标题栏的交互相对复杂,如按钮没有设置 WindowChrome.IsHitTestVisibleInChrome 属性为 True 那按钮是拿不到点击事件的。本文来告诉大家按钮 Button 的 IsEnabled 属性对 WindowChrome 的 IsHitTestVisibleInChrome 的影响在 WPF 中的默认交互是点击标题栏的时候,如果是双击标题栏,...2020-12-18 00:28:5664
2
-
原创 dotnet 部署 GitHub 的 Action Runner 制作自托管运行器
本文告诉大家如何在自己的 CI 服务器上部署一个私有的 GitHub Action Runner 用来执行 GitHub 上的仓库的构建安装为了作为一个 dotnet 的 GitHub Action Runner 的服务器,首先需要在自己的 CI 服务器上安装足够的负载。我下载了 VS 安装了所有能装的功能而 GitHub 的 Action Runner 运行器需要从 GitHub 仓库...2020-12-15 10:58:0549
0
-
原创 dotnet 如何更改应用在任务管理器显示的进程名 AssemblyTitle 的值
我有一个应用,我期望他在任务管理器里面显示为 Doubi 这样大家就知道这是一个逗比进程。但是我更改了程序集名,也就是 exe 文件名都没有什么用,因为在任务管理器里面通过 AssemblyTitle 属性决定显示的进程名。本文来告诉大家如何更改 AssemblyTitle 的值在旧版本的 Franken-proj 格式的 csproj 格式里面,在项目都有一个 Properties\Ass...2020-12-14 00:39:4269
0
-
原创 dotnet core 应用是如何跑起来的 通过自己写一个 dotnet host 理解运行过程
在上一篇博客是使用官方提供的 AppHost 跑起来整个 dotnet 程序。本文告诉大家在 dotnet 程序运行到托管代码之前,所需要的 Native 部分的逻辑。包括如何寻找 dotnet 运行时,如何加载运行时和框架然后跑起来业务端的 dll 文件的逻辑在上一篇博客告诉大家在 dotnet 的 AppHost 是如何做的,详细请看 dotnet core 应用是如何跑起来的 通过Ap...2020-12-07 00:42:16111
0
-
原创 dotnet 使用 FileAccess 与 OpenOrCreate 对文件访问权限的影响
本文告诉大家在 dotnet 里面,客户端应用,如 WPF 应用对当前应用程序运行用户无写权限的文件进行访问的时候,调用 File.Open 方法的各个参数的影响在 File.Open 方法里面其实就是对 FileStream 创建的封装,在 FileStream 的构造函数有大量的参数,而对文件权限有影响的是 FileMode 和 FileAccess 和 FileShare 三个通过 ...2020-12-07 00:42:1690
0
-
原创 Xamarin iOS 部署应用提示 iOS code signing key 失败
在部署 iOS 应用的时候,如果是拉别人的代码,因为被使用了别人的签名,就会提示 Error: iOS code signing key ‘iPhone Developer: lindexi@icloud.com (F56JH45N57)’ not found in keychain. 部署失败。解决方法是替换为自己的账号原因就是在 csproj 上的 CodesignProvision 属性设置的是别人的签名,可以通过替换为自己的账号解决在 Xamarin 从零开始部署 iOS 上的 Walte2020-12-03 21:20:3694
0
-
原创 dotnet 让 C# 可以通过动态生成 HLSL 使用 DX12 的 GPU 并行计算库 ComputeSharp 的简介
本文来安利大家一个超强的库,这个库可以让你的 C# 代码利用上 GPU 显卡的性能,进行一些并行计算。这个库是基于 DirectX12GameEngine 的 ComputeSharp 库。在这个库里面将会动态生成 HLSL 代码,使用着色器的方式在 GPU 上跑起来这个 ComputeSharp 库在 GitHub 完全开源,请看 https://github.com/Sergio069...2020-10-13 12:25:2437
0
-
原创 dotnet 使用 SourceLink 将 NuGet 链接源代码到 GitHub 等仓库
在发布 CBB 作为 NuGet 包的时候,我期望开发者在使用我的库进行调试,可以自动链接代码到对应打包的 GitHub 上的代码,可以从本地拿到对应的源代码进行调试。这样的调试方式对于开源项目来说,将会很方便使用方法很简单,通过 SourceLink 就能做到。这个 SourceLink 是一系列的库,包含了给 Azure Devops 使用的和给 GitHub 使用的,给 Gitlab...2020-10-09 01:50:5841
0
-
原创 dotnet 构建 SourceRoot items must include at least one top-level item 失败
在使用 dotnet 构建的时候提示 error : SourceRoot items must include at least one top-level (not nested) item when DeterministicSourcePaths is true 构建失败我在库里使用了 SourceLink 这个库,用来关联代码,详细请看 dotnet 使用 SourceLink ...2020-10-09 01:50:5818
0
-
原创 NuGet 更新库新版本的缓存问题
我有一个 NuGet 库有新的版本,但是我的服务器速度不够快,此时我第一次使用 NuGet 还原找不到库。在我服务器索引完成之后,再次使用 NuGet 会依然找不到这个库,而此时服务器准备完成。这是 NuGet 的缓存的坑我使用了 BaGet 搭建我私有的 NuGet 服务器,他的速度很快,但是索引一个上传的 NuGet 库依然需要一定的时间。如果在 NuGet 服务器还没准备完成之前调用...2020-10-07 05:06:1330
0
-
原创 dotnet 开发的单代码仓库和多代码仓库的优劣
在很多大团队开发的时候,将需要用到很多项目的组合开发一个软件,一个软件需要用到的项目有很多个,很少会用到一个项目就能做到。但多个项目一起开发,在配置管理和团队管理有不同的策略,一个就是让项目拆分为多个代码仓库,另一个就是将这些项目合在一个代码仓库。两个策略不能说哪个更好,本文和大家分享我所在的团队和我参与的其他团队的策略单代码仓库的优势在于管理方便,将所有的项目都放在一个代码仓库里面,此时...2020-10-06 01:37:5517
0
-
原创 dotnet 进行二进制差分压缩文件
我需要对一个文件做二进制差分压缩,我有一个文件的起始点,在之后的每次更改我都记录文件的二进制的差分,这样就可以通过起始点和差分文件计算修改后的文件。通过二进制差分可以用来提高文件保存磁盘读写速度,也可以减少软件自动更新需要的文件大小在 QQ 和 Chrome 等软件更新就使用这个技术,通过二进制差分方法下载差分文件,然后用差分文件和当前版本计算出新版本,将新版本写入文件。这样做的优势在于每...2020-10-06 01:37:559
0
-
原创 C# 写一个24点计算程序
我在和小伙伴玩 24 点这个游戏,但是我的计算速度比他慢,于是我就写了一个作弊的程序这个游戏的规则是给定 4 个数字,然后你根据加减乘除规则,不重复利用这几个数字计算出 24 这个数字例如给定了 2 6 1 1 这几个数字,可以使用 2 * 6 = 12 然后 1 + 1 = 2 拿到 2 和 12 两个数字,后面的也不需要说了简单的实现是在不考虑性能下,先对给定的数字进行全排列,然后...2020-10-04 03:40:2230
0