• walterlv
  • 朋友
  • RSS
  • 主题
搜索
Microsoft MVP

吕毅

.NET and Windows Developer, Microsoft MVP

  • 博客
  • 胡思乱想
  • 朋友
  • 开源项目
  • 关于
  • RSS 订阅

    C# 8.0 的可空引用类型,不止是加个问号哦!你还有很多种不同的可空玩法

    2019-12-08 07:29

    C# 8.0 引入了可空引用类型,你可以通过 ? 为字段、属性、方法参数、返回值等添加是否可为 null 的特性。

    但是如果你真的在把你原有的旧项目迁移到可空类型的时候,你就会发现情况远比你想象当中复杂,因为你写的代码可能只在部分情况下可空,部分情况下不可空;或者传入空时才可为空,传入非空时则不可为空。

    一个简单的方法:截取子类名称中不包含基类后缀的部分

    2019-12-08 07:29

    基类是 MenuItem,子类是 WalterlvMenuItem、FooMenuItem。基类是 Configuration,子类是 WalterlvConfiguration、ExtensionConfiguration。在代码中,我们可能会为了能够一眼看清类之间的继承(从属)关系而在子类名称后缀中带上基类的名称。但是由于这种情况下的基类不参与实际的业务,所以对外(文件/网络)的名称通常不需要带上这个后缀。

    本文提供一个简单的方法,让子类中基类的后缀删掉,只取得前面的那部分。

    可集成到文件管理器,一句 PowerShell 脚本发布某个版本的所有 NuGet 包

    2019-12-08 07:29

    要发布 NuGet 包,只需要执行命令 nuget push xxx.nupkg 即可,或者去 nuget.org 点鼠标上传。

    不过,如果你有很多的 NuGet 包并且经常需要推送的话,也可以集成到 Directory Opus 或者 Total Commander 中。

    配置 legacyUnhandledExceptionPolicy 防止后台线程抛出的异常让程序崩溃退出

    2019-11-28 08:08

    如果你的程序抛了异常,你是怎么处理的呢?等待程序崩溃退出?还是进行补救?

    如果是做 UI 开发,很容易就找到 Dispatcher.UnhandledException 事件,然后在事件中进行补救。如果补救成功,可以设置 e.Handled = true 来阻止异常继续让程序崩溃退出。但是,如果是后台线程抛出了异常呢?并没有 Dispatcher 可以用。所以我们就束手就擒让程序自己退出吗?

    WPF 程序如何跨窗口/跨进程设置控件焦点

    2019-11-27 00:53

    WPF 程序提供了 Focus 方法和 TraversalRequest 来在 WPF 焦点范围内转移焦点。但如果 WPF 窗口中嵌入了其他框架的 UI(比如另一个子窗口),那么就需要使用其他的方法来设置焦点了。

    PowerShell 的命令行启动参数(可用于执行命令、传参或进行环境配置)

    2019-11-20 06:39

    有一些程序不支持被直接启动,而要求通过命令行启动。这个时候,你就需要使用 PowerShell 或者 PowerShell Core 来启动这样的程序。我们都知道如何在命令行或各种终端中启动一个程序,但是当你需要自动启动这个程序的时候,你就需要知道如何通过 PowerShell 或其他命令行终端来启动一个程序,而不是手工输入然后回车运行了。

    本文就介绍 PowerShell 的命令行启动参数。利用这些参数,你可以自动化地通过 PowerShell 程序来完成一些原本需要通过手工执行的操作或者突破一些限制。

    清理 git 仓库太繁琐?试试 bfg!删除敏感信息删除大文件一句命令搞定(比官方文档还详细的使用说明)

    2019-11-05 03:22

    你可能接触过 git-filter-branch 来清理 git 仓库,不过同时也能体会到这个命令使用的繁琐,以及其超长的执行时间。

    现在,你可以考虑使用 bfg 来解决问题了!

    解决关闭模态窗口后,父窗口居然失去焦点跑到了其他窗口的后面的问题

    2019-11-05 01:58

    显示一个模态窗口,正常而普遍的操作。然而却一直有一个难缠的 BUG:当关闭模态窗口时,父窗口有时会跑到其他程序窗口的后面!

    而最近读到了微软工程师写过的话之后,明白了这个 BUG 的产生缘由以及解决方法。

    C#/.NET 当我们在写事件 += 和 -= 的时候,方法是如何转换成事件处理器的

    2019-10-29 03:53

    当我们在写 += 和 -= 事件的时候,我们会在 += 或 -= 的右边写上事件处理函数。我们可以写很多种不同的事件处理函数的形式,那么这些形式都是一样的吗?如果你不注意,可能出现内存泄漏问题。

    本文将讲解事件处理函数的不同形式,理解了这些可以避免编写代码的时候出现内存相关的问题。

    如何在 .NET 项目中开启不安全代码(以便启用 unsafe fixed 等关键字)

    2019-10-29 03:53

    有小伙伴希望在 .NET 代码中使用指针,操作非托管资源,于是可能使用到 unsafe fixed 关键字。但使用此关键字的前提是需要在项目中开启不安全代码。

    本文介绍如何在项目中开启不安全代码。

    不要在 C# 代码中写部分命名空间(要么不写,要么写全),否则会有源码兼容性问题

    2019-10-29 00:51

    我只是增加库的一个 API,比如增加几个类而已,应该不会造成兼容性问题吧。对于编译好的二进制文件来说,不会造成兼容性问题;但——可能造成源码不兼容。

    本文介绍可能的源码不兼容问题。

    .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表

    2019-10-22 08:59

    我们知道,32 位程序在读取注册表的时候,会自动将注册表的路径映射到 32 位路径下,即在 Wow6432Node 子节点下。但是 64 位程序不会映射到 32 位路径下。那么 64 位程序如何读取到 32 位程序写入的注册表路径呢?

    解决 WPF 嵌套的子窗口在改变窗口大小的时候闪烁的问题

    2019-10-22 06:14

    因为 Win32 的窗口句柄是可以跨进程传递的,所以可以用来实现跨进程 UI。不过,本文不会谈论跨进程 UI 的具体实现,只会提及其实现中的一个重要缓解,使用子窗口的方式。

    你有可能在使用子窗口之后,发现拖拽改变窗口大小的时候,子窗口中的内容不断闪烁。如果你也遇到了这样的问题,那么正好可以阅读本文来解决。

    System.ComponentModel.Win32Exception (0x80004005): 无效的窗口句柄。

    2019-10-22 06:13

    在 WPF 获取鼠标当前坐标的时候,可能会得到一个异常:System.ComponentModel.Win32Exception:“无效的窗口句柄。”。

    本文解释此异常的原因和解决方法。

    使用 Direct3D11 的 OpenSharedResource 方法渲染来自其他进程/设备的共享资源(SharedHandle)

    2019-10-22 06:07

    如果你得到了一个来自于其他进程或者其他模块的 Direct3D11 的共享资源,即 SharedHandle 句柄,那么可以使用本文提到的方法将其转换成 Direct3D11 的设备和纹理,这样你可以进行后续的其他处理。

    将 Direct3D11 在 GPU 中的纹理(Texture2D)导出到内存(Map)或导出成图片文件

    2019-10-22 06:07

    Direct3D11 的使用通常不是应用程序唯一的部分,于是使用 Direct3D11 的代码如何与其他模块正确地组合在一起就是一个需要解决的问题。

    本文介绍将 Direct3D11 在 GPU 中绘制的纹理映射到内存中,这样我们可以直接观察到此纹理是否是正确的,而不用担心是否有其他模块影响了最终的渲染过程。

    .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)

    2019-10-22 06:04

    我们知道 Windows 系统 NTFS 文件系统提供了硬连接功能,可以通过 mklink 命令开启。如果能够通过代码实现,那么我们能够做更多有趣的事情。

    本文提供使用 .NET/C# 代码创建 NTFS 文件系统的硬连接功能(目录联接)。

    WPF 高性能位图渲染 WriteableBitmap 及其高性能用法示例

    2019-10-22 04:43

    WPF 渲染框架并没有对外提供多少可以完全控制渲染的部分,目前可以做的有:

    • D3DImage,用来承载使用 DirectX 各个版本渲染内容的控件
    • WriteableBitmap,通过一段内存空间来指定如何渲染一个位图的图片
    • HwndHost,通过承载一个子窗口以便能叠加任何种类渲染的控件

    本文将解释如何最大程度压榨 WriteableBitmap 在 WPF 下的性能。

    .NET Framework 4.x 程序到底运行在哪个 CLR 版本之上

    2019-10-16 01:42

    当我们编译程序目标框架选为 .NET Framework 4.5/4.6/4.7/4.8 时,CLR 运行时是如何判断我们究竟应该用哪一个 .NET Framework 呢?.NET Framework 的版本到底由哪些部分组成?我们编译 .NET Framework 时选择的版本决定了什么?

    使用 .editorconfig 配置 .NET/C# 项目的代码分析规则的严重程度

    2019-10-12 03:35

    随着 Visual Studio 2019 更新,在 Visual Studio 中编写代码的时候也带来了基于 Roslyn 的代码质量分析。有一些代码分析严重程度可能与团队约定的不一致,这时就需要配置规则的严重程度。另外如果是个人使用插件安装了分析器,也可以配置一些严重程度满足个人的喜好。

    本文介绍使用 .editorconfig 文件来配置 .NET/C# 项目中,代码分析规则的严重性。可以是全局的,也可以每个项目有自己的配置。

    什么是模态窗口?本文带你了解模态窗口的本质

    2019-10-10 11:28

    做 Windows 桌面应用开发的小伙伴们对“模态窗口”(Modal Dialog)一定不陌生。如果你希望在模态窗口之上做更多的事情,或者自己实现一套模态窗口类似的机制,那么你可能需要了解模态窗口的本质。

    本文不会太深,只是从模态窗口一词出发,抵达大家都熟知的一些知识为止。

    直击本质:WPF 框架是如何实现模态窗口的

    2019-10-10 10:57

    想知道你在 WPF 编写 Window.ShowDialog() 之后,WPF 框架是如何帮你实现模态窗口的吗?

    本文就带你来了解这一些。

    .NET/C# 检测电脑上安装的 .NET Framework 的版本

    2019-10-10 08:51

    如果你希望知道某台计算机上安装了哪些版本的 .NET Framework,那么正好本文可以帮助你解决问题。

    Windows 系统上用 .NET/C# 查找所有窗口,并获得窗口的标题、位置、尺寸、最小化、可见性等各种状态

    2019-10-10 04:11

    在 Windows 应用开发中,如果需要操作其他的窗口,那么可以使用 EnumWindows 这个 API 来枚举这些窗口。

    你可以使用本文编写的一个类型,查找到所有窗口中你关心的信息。

    在 WPF 程序中应用 Windows 10 真•亚克力效果

    2019-10-10 02:25

    从 Windows 10 (1803) 开始,Win32 应用也可以有 API 来实现原生的亚克力效果了。不过相比于 UWP 来说,可定制性会差很多。

    本文介绍如何在 WPF 程序中应用 Windows 10 真•亚克力效果。(而不是一些流行的项目里面自己绘制的亚克力效果。)

    使用 SetWindowCompositionAttribute 来控制程序的窗口边框和背景(可以做 Acrylic 亚克力效果、模糊效果、主题色效果等)

    2019-10-10 00:09

    Windows 系统中有一个没什么文档的 API,SetWindowCompositionAttribute,可以允许应用的开发者将自己窗口中的内容渲染与窗口进行组合。这可以实现很多系统中预设的窗口特效,比如 Windows 7 的毛玻璃特效,Windows 8/10 的前景色特效,Windows 10 的模糊特效,以及 Windows 10 1709 的亚克力(Acrylic)特效。而且这些组合都发生在 dwm 进程中,不会额外占用应用程序的渲染性能。

    本文介绍 SetWindowCompositionAttribute 可以实现的所有效果。你可以通过阅读本文了解到与系统窗口可以组合渲染到哪些程度。

    使用傲梅分区助手无损合并分区,无损调整分区大小

    2019-10-07 12:14

    Windows 本身就提供了强大的磁盘和分区管理工具,一个是操作简单的“磁盘管理”,一个是功能强大的命令行版的“diskpart”。不过这两个都有一些限制,一是不能影响到系统文件,二是其修改的分区不能被应用程序占用(diskpart 可在下次重启时做到)。另外,系统为了管理工具操作的效率和正确性,也有一些功能没有开放。

    DiskGenius 是个强大的工具,不过傲梅也很良心。本文介绍使用傲梅分区助手来管理磁盘。

    EFI 分区/恢复分区不可删除?你需要使用命令行了(配合鼠标操作)

    2019-10-07 03:05

    Windows 系统在安装的时候,会自动为我们的磁盘划分一个恢复分区和一个 EFI 分区。如果后面不打算再用这些分区的时候,却发现无法删除。

    本文将提供解决方法。

    EFI 分区/恢复分区不可删除?你需要使用命令行了(全命令行操作)

    2019-10-07 03:04

    Windows 系统在安装的时候,会自动为我们的磁盘划分一个恢复分区和一个 EFI 分区。如果后面不打算再用这些分区的时候,却发现无法删除。

    本文将提供解决方法。

    推荐几款连字字体,在代码编辑器中启用连字字体(Visual Studio Code)

    2019-09-27 02:04

    启用转为编程设计的连字字体,可以给你的变成带来不一样的体验。

    • ←
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • →

    © 2014-2021 walterlv, all rights reserved. Powered by: Jekyll Theme by: walterlv Based on Thiago Rossener