lindexi

林德熙 - 微软最具价值专家和 .NET 基金会成员

林德熙

WPF 如何确定应用程序开启了 Pointer 触摸消息的支持

因为 WPF 在开启 Pointer 和没有开启的基础表现是几乎相同的,因此从业务层很难了解到当前是否开启了 Pointer 消息。本文从开发者的角度,通过 Windows 消息判断当前是否开启 Pointer 支持

WPF 获得触摸精度和触摸点

本文主要告诉大家如何获得所有的触摸设备的触摸精度和触摸点数。

dotnet 警惕 C# 的 is var 写法

本文将和大家介绍 C# 语言设计里面,我认为比较坑的一个语法。通过 is var 的写法,会让开发者误以为 null 是不被包含的,然而事实是在这里的 var 是被赋予含义的,将被允许 null 通过判断逻辑,于是就会让开发者收到了奇怪的空异常

解决 System.Net.Sockets.SocketException 10106 无法加载或初始化请求的服务提供程序 无法联网

本文收集 System.Net.Sockets.SocketException 异常错误码为 10106 导致无法联网的问题

解决 System.Net.Sockets.SocketException 10045 参考的对象类型不支持尝试的操作 无法联网

本文收集 System.Net.Sockets.SocketException 异常错误码为 10045 导致无法联网的问题

WPF 触摸下如何给 StylusPointCollection 添加点

本文告诉大家如何在触摸下给 WPF 的 StylusPointCollection 添加新的点

WPF 笔迹算法 从点集转笔迹轮廓

本文将告诉大家一些笔迹算法,从用户输入的点集,即鼠标轨迹点或触摸轨迹点等,转换为一个可在界面绘制显示笔迹画面的基础数学算法。尽管本文标记的是 WPF 的笔迹算法,然而实际上本文更侧重基础数学计算,理论上可以适用于任何能够支持几何绘制的 UI 框架上,包括 UWP 或 WinUI 或 UNO 或 MAUI 或 Eto 等框架

IIncrementalGenerator 增量 Source Generator 生成代码应用 将构建时间写入源代码

本文将和大家介绍一个 IIncrementalGenerator 增量 Source Generator 生成代码技术的应用例子,将当前的构建时间写入到代码里面。这个功能可以比较方便实现某些功能的开关,比如说设置某个功能自动在具体应用发布之后过一段时间就失效等功能

dotnet 探究 SemanticKernel 的 planner 的原理

在使用 SemanticKernel 时,我着迷于 SemanticKernel 强大的 plan 能力,通过 plan 功能可以让 AI 自动调度拼装多个模块实现复杂的功能。我特别好奇 SemanticKernel 里的 planner 的原理,好奇底层具体是如何实现的。好在 SemanticKernel 是完全开源的,通过阅读源代码,我理解了 SemanticKernel 的工作机制,接下来我将和大家分享我所了解到的原理

dotnet SemanticKernel 入门 开篇

本文将开坑告诉大家什么是 SemanticKernel 以及如何使用框架

开源实战

本文记录我参与的开源项目

dotnet 使用 ToUpperInvariant 替换 ToUpper 以避免初始化 icu 过慢

在应用软件启动过程中,客户端应用软件是对性能敏感的。比如在解析命令行参数的时候,有时候需要进行字符串处理逻辑。一般来说命令行参数都是语言文化无关的,在需要进行全大写或全小写转换过程中,采用 ToUpperInvariant 替换 ToUpper 方法可以避免初始化 icu 模块,减少 icu 模块初始化过慢影响启动性能

WPF 已知问题 RadioButton 指定 GroupName 后关闭窗口可能导致无法选中

本文记录一个 WPF 已知问题,当 WPF 的 RadioButton 指定 GroupName 且将 IsChecked 状态绑定到 ViewModel 上,将包含以上控件的代码的窗口显示两个,接着关闭其中一个。此时可以看到依然开着的窗口的 RadioButton 控件无法正确在用户界面上点击选中

dotnet 判断程序当前使用管理员运行降低权使用普通权限运行

有一些程序是不想通过管理员权限运行的,因为在很多文件的读写,如果用了管理员权限程序写入的程序,其他普通权限的程序是无法直接访问的。 本文告诉大家如何判断当前的程序是通过管理员权限运行,然后通过资源管理器使用普通权限运行

ASP.NET Core 警惕可空类型开启之后模型校验失败

在开启 Nullable 可空类型之后,原本可以调用的 API 也许就会提示 400 BadRequest 因为传入参数不合法,模型校验失败,此时将不会进入预期的 API 函数,同时也不会在输出里面找到有用的信息

dotnet 警惕 Assembly.Location 返回空

在大部分情况下,获取当前所运行的应用程序的所在路径时,常用的就是 Assembly.Location 属性,按照之前的经验,使用 Assembly.Location 是最为稳定的做法,然而在 dotnet 发布单文件时,此属性将会为空,导致一些不符合预期的行为

程序猿修养 日志应该如何写

在和小伙伴讨论日志的时候,小伙伴说的是文件的读写,而实际上的日志在广义上包含了任何的输出方式,无论是控制台还是文件。而日志记录在哪不重要,重要的是什么日志应该记录,应该怎么记录和记录什么内容

dotnet 8 WPF 支持在 RDP 远程桌面状态下启用渲染硬件加速

本文将和大家介绍在 dotnet 8 里 WPF 引入的新功能之一,在 RDP 远程桌面状态下启用渲染硬件加速

dotnet 推荐 LightWorkFlowManager 轻量的工作过程管理库

本文将和大家推荐我团队开源的 LightWorkFlowManager 轻量的工作过程管理库,适合任何需要执行工作过程的应用逻辑,可以方便将多个工作过程拼凑起来,且自动集成重试和失败处理,以及日志和上报功能

WPF 插拔触摸设备触摸失效

最近使用 WPF 程序,在不停插拔触摸设备会让 WPF 程序触摸失效。通过分析 WPF 源代码可以找到 WPF 触摸失效的原因。

win10 uwp 简单制作一个 Path 路径绘制的图标按钮

本文告诉大家在 UWP 或 WinUI 3 里面如何简单制作一个由 Path 几何路径图形绘制的图标按钮

UNO 的 SamplesApp.Skia.Gtk 丢失字体文件抛出空异常

在运行 UNO 的 SamplesApp.Skia.Gtk 例子程序时,如果没有拷贝字体文件夹,导致字体丢失,将会在运行的时候抛出 NullReferenceException 空异常

WPF 触摸底层 PenImc 是如何工作的

在 WPF 里面有其他软件完全比不上的超快速的触摸,这个触摸是通过 PenImc 获取的。现在 WPF 开源了,本文就带大家来阅读触摸底层的代码,阅读本文需要一点 C# 和 C++ 基础

探索 WPF 的 ITabletManager.GetTabletCount 在 Win11 系统的底层实现

本文将和大家介绍专为 WPF 触摸模块提供的 ITabletManager 的 GetTabletCount 方法在 Windows 11 系统的底层实现

dotnet 读 WPF 源代码笔记 插入触摸设备的初始化获取设备信息

在 WPF 触摸应用中,插入触摸设备,即可在应用里面使用上插入的触摸设备。在 WPF 使用触摸设备的触摸时,需要获取到触摸设备的信息,才能实现触摸

dotnet 推荐一个使用 Json 直接路由通讯的 IPC 库

本文将和大家推荐一个我所在团队开源的本机多进程通讯 IPC 库,此 IPC 支持使用 JSON 格式进行直接路由通讯,具有使用方便,稳定性高,性能好的优点

dotnet 通过引用 msbuild 程序集实现自己定制编译器

本来我想说的是基于引用 msbuild 程序集来自己做一个编译器,但是想想好像本文做的,和造编译器没啥关系,咱自己调用 msbuild 的 API 而已。本文来告诉大家如何引用 msbuild 程序集,如何在自己的应用程序里面嵌入 msbuild 的构建代码,实现 dotnet build 的效果

dot net core 使用 IPC 进程通信

本文告诉大家如何使用dot net core 和其他进程进行通信。

WPF 已知问题 某些设备上的应用在 WindowChromeWorker 抛出 System.OverflowException 异常

准确来说,这个不算是 WPF 的问题,而是系统等的问题。在某些设备上的使用了 WindowChrome 功能的 WPF 应用,将在运行过程,在 WindowChromeWorker 类里面抛出 System.OverflowException 异常。核心原因是这些设备是 x64 设备,运行的 x64 的 WPF 应用程序,在消息循环里面传入的 lParam 是一个 x64 的指针,但在 WPF 里面使用 ToInt32 方法进行转换,刚好此 x64 的指针超过 int 的范围,从而抛出异常

WPF 已知问题 传入错误数据给到 WriteableBitmap 可能导致渲染线程锁住

本文记录一个 WPF 已知问题,此问题已经被我修复。传入错误的数据给到 WriteableBitmap 对象,比如调用 WritePixels 时传入错误的 stride 数值,将可能导致渲染线程进入无限自旋锁

在 UOS 统信运行 dotnet 程序提示没有通过系统安全验证无法运行

本文记录 dotnet 应用程序在 UOS 统信系统上运行时,提示 没有通过系统安全验证,无法运行 的问题

dotnet 统信 UOS 运行 UNO FrameBuffer 应用错误 Failed to open FrameBuffer device

本文记录在 UOS 统信系统上运行 UNO 的基于 Skia 的 FrameBuffer 应用报错问题,错误提示是 Unhandled exception. System.InvalidOperationException: Failed to open FrameBuffer device /dev/fb0 (13) 的问题。问题原因是 UNO 应用的 FrameBuffer 写入失败,本文将告诉大家调查方法

dotnet 在 UOS 统信系统上运行 UNO 程序输入时闪烁黑屏问题

本文记录我在虚拟机内安装了 UOS 统信系统,运行 UNO 的基于 Skia 的 Gtk 应用程序时,在输入的过程中不断窗口闪黑问题

WPF 对接 Vortice 在 Direct2D 绘制从 WIC 加载的图片

本文告诉大家如何通过 Vortice 在 Direct2D 里面绘制图片,图片的来源是 WIC 加载出的图片

WPF 动画性能测试应用 一千个半透明矩形做动画

在很多性能测试开始之前,都需要测试一下自己的期望优化的设备的性能上限是多少。我每次都是重新写一个测试应用,因为每次需要优化的方向都不相同。本文将记录一个我写的一个简单的测试应用,这里面包含了一千个半透明的矩形,且矩形都在做动画。可以测试自己的电脑的性能,看看是否一千个带动画的半透明矩形就带不动