lindexi

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

林德熙

WPF 获取进程启动到当前现在的时间

从应用程序线程创建现在的时间可以通过 Process 类的 StartTime 属性获取,也就是其实这个方法不局限 WPF 可用,任何 dotnet 应用都能此方法

WPF 新建用户控件提示 Error MC3000 首个 xaml 字符不合法

在 WPF 新建用户用户控件时,偶尔的 VS 版本会逗你,给你创建了一个编码不对或偷偷给你的文件第一个字符添加了一个不可见字符,此时将会构建不通过

Unity3D 判断点击命中物体对象和命中环境

我想要做到点击物体的时候显示一些内容,而点击环境或其他游戏物体的时候隐藏一些内容

dotnet ConditionalWeakTable 的底层原理

在 dotnet 中有一个特殊的类,这个类能够做到附加属性一样的功能。也就是给某个对象附加一个属性,当这个对象被回收的时候,自然解除附加的属性的对象的引用。本文就来聊聊这个类的底层原理

GitHub 的 Action 判断仅在主仓库才执行脚本

我有一个 GitHub 项目,这个项目配置了仅需要在源仓库才能执行的 Action 如推送 NuGet 等发布动作。如何在 Action 里面设置让 Fork 的仓库不执行 Action 的步骤

ASP.NET Core 将文件夹内容输出为压缩包文件方法

本文主要是告诉大家一个省内存的方法,将整个文件夹的内容作为一个压缩包输出,但是实际上没有申请那么多的内存,也不需要升级创建一个压缩包文件。原理是通过逐个读文件然后按照压缩包格式输出

dotnet CBB 为什么决定推送 Tag 才能打包

通过推送 Tag 才打 NuGet 包的方法的作用不仅仅是让打包方便,让打包这个动作可以完全在本地执行,无需关注其他系统的使用步骤。更重要的是可以强制每个可能被安装的 NuGet 包版本都能有一个和他对应的 Tag 号,原因是为了解决回退到某个版本发现有一个坑,这个坑是因为某个依赖库的版本问题,此时我期望最小改动,我虽然能拿到这个库的代码,但是我很难知道我这个版本安装的 NuGet 库对应依赖库的哪个 commit 的代码

C# dotnet TypeForwarding 的用法

在 CLR 中提供这样的支持,某个类从程序集 A 放到了程序集 B 里面,可以通过一些黑科技让类型就像原本就在程序集 A 一样。用这个方法可以比较好的解决兼容性的问题

WPF dotnet core 的 Blend SDK Behaviors 库

之前版本是通过安装 Blend SDK 支持 Behaviors 库的,但是这个方法都是通过引用 dll 的方式,不够优雅。在升级到 dotnet core 3.0 的时候就需要使用 WPF 官方团队开源的 Microsoft.Xaml.Behaviors.Wpf 库代替

C# dotnet 获取某个字符所在 Unicode 字符平面映射

在 dotnet 里面可以通过安装 System.Text.Encodings.Web 库拿到 UnicodeRanges 这个包含了 Unicode 标准的平面映射。但是我还没有找到如何判断一个字符是落在哪个平面的逻辑,本文就告诉大家一个可以使用的方法,这个方法同时稍微兼顾了性能

dotnet OpenXML SDK 文本占位符解析

在使用 OpenXML SDK 解析 PPT 文档的文本占位符的时候,需要对 PPT 的格式有一定的了解,尽管整个 OpenXML SDK 包括文档等都很详细。但是有一些细节文档上虽然有写,但是没有强调一下,就被我忽略了

SublimeText 配置跳转回上个光标坐标

在 VisualStudio 可以通过 ctrl+- 的功能,跳转到上个光标所在的坐标。如在多个方法之间跳转,可以通过这个快捷键快速实现。在 SublimeText 可以在菜单的 Goto 里面找到 Jump Back 功能,这个功能就是对应 VisualStudio 的跳转回上个光标的功能,也就是向后定位功能

C# dotnet 自己实现一个线程同步上下文

昨天鹏飞哥问了我一个问题,为什么在控制台程序的主线程等待某个线程执行完成之后回来,是在其他线程执行的。而 WPF 在等待某个线程执行完成之后,可以回到主线程执行。其实这是因为在 WPF 和 WinForms 和 ASP.NET 框架里面都自己实现了线程同步上下文,通过线程同步上下文做到调度线程执行。本文就来和小伙伴聊一下如何自己实现一个线程同步上下文

C# dotnet 使用 TaskCompletionSource 实现暂停功能

在 C# 里面,可以使用 dotnet 的 TaskCompletionSource 方法自己实现一个异步任务,这个任务可以方便设置任务是否完成等做到让等待的过程继续或等待。根据这个功能可以解决在复杂的功能里面通过异步等待的方法实现暂停。做法就是等待一个异步任务,如果这个功能处于暂停,那么只需要让这个异步任务不结束,此时整个功能就会在等待,直到设置了异步任务完成

Windows 对全屏应用的优化

全屏应用对应的是窗口模式应用,全屏应用指的是整个屏幕都是被咱一个应用独占了,屏幕上没有显示其他的应用,此时的应用就叫全屏应用。如希沃白板这个程序。本文主要告诉大家从微软官方的文档以及考古了解到的 Windows 对全屏应用的优化,以及是如何进行的优化,方便小伙伴在撕的时候可以找到根据

GitHub 如何过滤某个作者的 MR 内容

在 WPF 开源仓库里面有大量的机器人的 MR 但是我想要了解现在 WPF 仓库有多少开发者在贡献代码,此时如何在 GitHub 中过滤某个作者的 MR 内容

Windows 核心编程笔记 Direct2D 比 GDI 快的一部分

每次看圣经都有不同的收获,在阅读了内核相关的内容,发现了有从用户模式和内核模式切换的角度说明 Direct2D 比 GDI 快的一部分。但这不是说明 Direct2D 一定比 GDI 快,而是在应用程序消费在用户模式和内核模式切换的耗时这一部分是 Direct2D 更少

Roslyn 如何使用 MSBuild ZipDirectory 压缩文件夹

在 csproj 文件或在 NuGet 的 Targets 文件中可以通过 Target 调用 ZipDirectory 任务用来制作压缩包,在构建的时候,可以用这个方法将某个输出文件夹等内容压缩输出

WinForms 下的高性能笔迹方法

在 WPF 中可以通过 StylusPlugIn 的方式快速从触摸线程拿到触摸数据,而 WinForms 没有这个机制,但是可以通过 Microsoft.Ink 组件和 WPF 相同在 RealTimeStylus 服务拿到触摸点

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

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

C# dotnet 的锁 SemaphoreSlim 和队列

本文主要是试验在顺序进入等待 SemaphoreSlim 的任务是否会按照顺序经过锁执行

WPF 升级 .NET Core 的理由

本文列举一些让 WPF 升级 .NET Core 的理由

C# 为什么不建议对任意的 IEnumerable 反转

我想要反转一个枚举,但是代码审查没过,这是为什么

Xamarin 使用 GTK 提示找不到 libglib-2.0-0.dll 找不到

在使用 Xamarin 开发 Linux 应用的时候,刚开始如果没有弄好 libglib-2.0-0.dll 的依赖库,那么将会在运行的时候,在 Gtk.Application.Init() 这句代码提示找不到这个库

C# dotnet 分割换行

我在写一个 UWP 文本阅读器,我需要提升性能,需要将文本按行绘制但是文本里面的换行分割规则有点坑,本文写了一个辅助的方法用于分割换行

C# dotnet 高性能多线程工具 AsyncAutoResetEvent 异步等待使用方法和原理

在 C# 里面配合 dotnet 的 Task 可以作出 AsyncAutoResetEvent 高性能多线程工具,从命名可以看到 AsyncAutoResetEvent 的意思就是支持异步的自动线程等待事件,用于多线程竞争访问执行权,可以用在消费队列或用在限制有限线程执行的业务上

Roslyn 如何给每个平台设置 PlatformTarget 属性

在使用 csproj 格式,如果需要给不同的平台设置 PlatformTarget 对应平台的值,需要写比较多的代码,本文告诉大家一个简便的方法

C# 反射判断属性是抽象继承

我在写一个有趣的 WPF 软件可以通过 dll 反射重新生成代码,我需要了解dll里面每个属性是抽象的还是继承的还是虚属性

WPF 讲讲 Microsoft.NET.Sdk.WindowsDesktop 的原理

在使用 .NET Core 3.0 和以上版本,可以使用新的 SDK 版本支持的 csproj 项目文件,这个 SDK 格式的项目文件可以支持 .NET Core 以及 .NET Framework 版本的 WPF 核心就是在 csproj 项目的第一句话。本文就来和大家聊这个 Microsoft.NET.Sdk.WindowsDesktop 的原理

C# dotnet 使用 OpenXml 解析 PPT 元素的坐标和宽度高度

在阅读本文之前,我期望你能了解基础的 PPT 解析内容,或看我的入门级博客。本文将告诉大家如何从 PPT 里面解析出通用元素的 x 和 y 的值,以及元素的宽度和高度的值

dotnet core 使用 ef 迁移常见问题

本文记录一些常见的使用 EF Core 的问题

C# dotnet 将 Stream 保存到文件的方法

在拿到一个 Stream 如何优雅将这个 Stream 保存到代码

WPF 打包为 UWP 应用构建失败 MSB3270 不匹配 AMD64 架构

在使用 dotnet core 3.1 的 WPF 打包为 UWP 应用的时候,如果没有设置 PublishProfiles 那么将会在构建 x64 提示所生成项目的处理器架构“AMD64”与引用的处理器架构“x86”不匹配

C# dotnet 使用 OpenXml 解析 PPT 里面的视频

本文告诉大家如何从 PPTX 文件里面解析出视频

WPF 已知问题 全屏透明窗口弹出子窗口会闪烁

在 WPF 中通过设置 WindowStyle 为 None 以及 WindowState 为 Maximized 进入全屏,同时设置 AllowsTransparency 支持透明,此时弹出一个设置 WindowStyle 是 None 的子窗口,用 VisualStudio 2019 运行将会看到 子窗口 先显示出来,然后回到主窗口下面,然后再显示到主窗口上面