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

吕毅

.NET and Windows Developer, Microsoft MVP

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

    如何在 Visual Studio 2019 中设置使用 .NET Core SDK 的预览版(全局生效)

    2019-09-24 00:37

    .NET Core 3 相比于 .NET Core 2 是一个大更新。也正因为如此,即便它长时间处于预览版尚未发布的状态,大家也一直在使用。

    Visual Studio 2019 中提供了使用 .NET Core SDK 预览版的开关。但几个更新的版本其开关的位置不同,本文将介绍在各个版本中的位置,方便你找到然后设置。

    WPF 程序如何移动焦点到其他控件

    2019-09-19 03:41

    WPF 中可以使用 UIElement.Focus() 将焦点设置到某个特定的控件,也可以使用 TraversalRequest 仅仅移动焦点。本文介绍如何在 WPF 程序中控制控件的焦点。

    使用 SetParent 制作父子窗口的时候,如何设置子窗口的窗口样式以避免抢走父窗口的焦点

    2019-09-19 02:24

    制作传统 Win32 程序以及 Windows Forms 程序的时候,一个用户看起来独立的窗口本就是通过各种父子窗口嵌套完成的,有大量窗口句柄,窗口之间形成父子关系。不过,对于 WPF 程序来说,一个独立的窗口实际上只有一个窗口句柄,窗口内的所有内容都是 WPF 绘制的。

    如果你不熟悉 Win32 窗口中的父子窗口关系和窗口样式,那么很有可能遇到父子窗口之间“抢夺焦点”的问题,本文介绍如何解决这样的问题。

    .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件

    2019-09-18 14:05

    弱引用是 .NET 引入的概念,可以用来协助解决内存泄漏问题。然而事件也可能带来内存泄漏问题,是否有弱事件机制可以使用呢?.NET 没有自带的弱事件机制,但其中的一个子集 WPF 带了。然而我们不是什么项目都能引用 WPF 框架类库的。

    本文介绍 Walterlv.WeakEvents 库来定义和使用弱事件。

    .NET 设计一套高性能的弱事件机制

    2019-09-18 13:59

    弱引用是 .NET 引入的概念,可以用来协助解决内存泄漏问题。然而事件也可能带来内存泄漏问题,是否有弱事件机制可以使用呢?.NET 没有自带的弱事件机制,但其中的一个子集 WPF 带了。然而我们不是什么项目都能引用 WPF 框架类库的。网上有很多弱事件的 NuGet 包,不过仅仅支持定义事件的时候写成弱事件而不支持让任意事件变成弱事件,并且存在性能问题。

    本文将设计一套弱事件机制,不止可以让任意一个 CLR 事件成为弱事件,还具有近乎原生事件的性能。

    .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)

    2019-09-18 13:59

    弱引用是 .NET 引入的概念,可以用来协助解决内存泄漏问题。然而事件也可能带来内存泄漏问题,是否有弱事件机制可以使用呢?.NET 没有自带的弱事件机制,但其中的一个子集 WPF 带了。然而我们不是什么项目都能引用 WPF 框架类库的。网上有很多弱事件的 NuGet 包,不过仅仅支持定义事件的时候写成弱事件而不支持让任意事件变成弱事件,并且存在性能问题。

    本文介绍 Walterlv.WeakEvents 库来做弱事件。你可以借此将任何一个 CLR 事件当作弱事件来使用。

    C#/.NET 中启动进程时所使用的 UseShellExecute 设置为 true 和 false 分别代表什么意思?

    2019-09-17 04:37

    在 .NET 中创建进程时,可以传入 ProcessStartInfo 类的一个新实例。在此类型中,有一个 UseShellExecute 属性。

    本文介绍 UseShellExecute 属性的作用,设为 true 和 false 时,分别有哪些进程启动行为上的差异。

    .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃

    2019-09-12 06:58

    在 .NET Framework 4.8 中,try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃。而 .NET Core 3.0 中不会出现这样的问题。

    本文涉及的 Bug 已经报告给了微软,并且得到了微软的回复。是 .NET Framework 4.8 为了解决一个安全性问题而强行结束了进程。

    如何在 WPF 中获取所有已经显式赋过值的依赖项属性

    2019-09-12 03:39

    获取 WPF 的依赖项属性的值时,会依照优先级去各个级别获取。这样,无论你什么时候去获取依赖项属性,都至少是有一个有效值的。有什么方法可以获取哪些属性被显式赋值过呢?如果是 CLR 属性,我们可以自己写判断条件,然而依赖项属性没有自己写判断条件的地方。

    本文介绍如何获取以及显式赋值过的依赖项属性。

    在 WPF 中获取一个依赖对象的所有依赖项属性

    2019-09-12 03:24

    本文介绍如何在 WPF 中获取一个依赖对象的所有依赖项属性。

    临时编写和调试 C++ 代码?用 VSCode 就够了!一分钟搭好 C++ 调试环境

    2019-09-07 02:07

    突然间要编写或者调试几个 C++ 的小程序,动用 Visual Studio 创建一个解决方案显得大了些。如果能够利用随时随地就方便打开的 Visual Studio Code 来开发,则清爽很多。

    本文教你一分钟在 Visual Studio Code 中搭建好 C++ 开发环境。

    在使用 .NET Remoting 技术开发跨进程通信时可能遇到的各种异常

    2019-09-05 13:26

    在使用 .NET Remoting 开发跨进程应用的时候,你可能会遇到一些异常。因为这些异常在后验的时候非常简单但在一开始有各种异常烦扰的时候却并不清晰,所以我将这些异常整理到此文中,方便小伙伴们通过搜索引擎查阅。

    .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态

    2019-09-05 06:49

    在 Windows 系统中,一段时间不操作键盘和鼠标,屏幕便会关闭,系统会进入睡眠状态。但有些程序(比如游戏、视频和演示文稿)在运行过程中应该阻止屏幕关闭,否则屏幕总是关闭,会导致体验会非常糟糕。

    本文介绍如何编写 .NET/C# 代码临时阻止屏幕关闭以及系统进入睡眠状态。

    git fetch 失败,因为 unable to resolve reference 'refs/remotes/origin/xxx': reference broken

    2019-09-05 06:37

    我在使用 git fetch 命令的时候,发现竟然会失败,提示错误 error: cannot lock ref 'refs/remotes/origin/xxx': unable to resolve reference 'refs/remotes/origin/xxx': reference broken。

    本文介绍如何修复这样的错误,并探索此错误产生的原因。

    WPF 不要给 Window 类设置变换矩阵(分析篇):System.InvalidOperationException: 转换不可逆。

    2019-09-02 06:13

    最近总是收到一个异常 “System.InvalidOperationException: 转换不可逆。”,然而看其堆栈,一点点自己写的代码都没有。到底哪里除了问题呢?

    虽然异常堆栈信息里面没有自己编写的代码,但是我们还是找到了问题的原因和解决方法。

    WPF 不要给 Window 类设置变换矩阵(应用篇)

    2019-09-02 04:34

    WPF 的 Window 类是不允许设置变换矩阵的。不过,总会有小伙伴为了能够设置一下试图绕过一些验证机制。

    不要试图绕过,因为你会遇到更多问题。

    通过设置启用 Visual Studio 默认关闭的大量强大的功能提升开发效率

    2019-08-29 13:54

    使用 Visual Studio 开发 C#/.NET 应用程序,以前有 ReSharper 来不足其各项功能短板,后来不断将 ReSharper 的功能一点点搬过来稍微好了一些。不过直到 Visual Studio 2019,才开始渐渐可以和 ReSharper 拼一下了。

    如果你使用 Visual Studio 2019,那么像本文这样配置一下,可以大大提升你的开发效率。

    C#/.NET 中 Thread.Sleep(0), Task.Delay(0), Thread.Yield(), Task.Yield() 不同的执行效果和用法建议

    2019-08-29 08:34

    在 C#/.NET 中,有 Thread.Sleep(0), Task.Delay(0), Thread.Yield(), Task.Yield() 中,有几种不同的让当前线程释放执行权的方法。他们的作用都是放弃当前线程当前的执行权,让其他线程得以调度。但是他们又不太一样。

    本文说说他们的原理区别和用法区别。

    WPF 的 Application.Current.Dispatcher 中,为什么 Current 可能为 null

    2019-08-27 05:05

    在 WPF 程序中,可能会存在 Application.Current.Dispatcher.Xxx 这样的代码让一部分逻辑回到主 UI 线程。因为发现在调用这句代码的时候出现了 NullReferenceException,于是就有三位小伙伴告诉我说 Current 和 Dispatcher 属性都可能为 null。

    然而实际上这里只可能 Current 为 null 而此上下文的 Dispatcher 是绝对不会为 null 的。(当然我们这里讨论的是常规编程手段,如果非常规手段,你甚至可以让实例的 this 为 null 呢……)

    WPF 的 Application.Current.Dispatcher 中,Dispatcher 属性一定不会为 null

    2019-08-27 04:51

    在 WPF 程序中,可能会存在 Application.Current.Dispatcher.Xxx 这样的代码让一部分逻辑回到主 UI 线程。因为发现在调用这句代码的时候出现了 NullReferenceException,于是就有三位小伙伴告诉我说 Current 和 Dispatcher 属性都可能为 null。

    然而实际上这里只可能 Current 为 null 而此上下文的 Dispatcher 是绝对不会为 null 的。(当然我们这里讨论的是常规编程手段,如果非常规手段,你甚至可以让实例的 this 为 null 呢……)

    使用 SetParent 跨进程设置父子窗口时的一些问题(小心卡死)

    2019-08-27 00:49

    在微软的官方文档中,说 SetParent 可以在进程内设置,也可以跨进程设置。当使用跨进程设置窗口的父子关系时,你需要注意本文提到的一些问题,避免踩坑。

    程序员可能会使用的各种命名规则

    2019-08-19 00:44

    古老的程序员们有时会纠结命名问题,而现在,程序员们的命名已经开创了数个流派。本文整理了程序员们命名会使用到的各种流派,当然一些编程语言会同时使用数个流派。

    System.InvalidOperationException:“BuildWindowCore 无法返回寄宿的子窗口句柄。”

    2019-08-14 08:32

    当试图在 WPF 窗口中嵌套显示 Win32 子窗口的时候,你有可能出现错误:“BuildWindowCore 无法返回寄宿的子窗口句柄。”。

    这是很典型的 Win32 错误,本文介绍如何修复此错误。

    System.InvalidOperationException:“寄宿 HWND 必须是子窗口。”

    2019-08-14 08:32

    当试图在 WPF 窗口中嵌套显示 Win32 子窗口的时候,你有可能出现错误:“System.InvalidOperationException:“寄宿 HWND 必须是子窗口。””。

    这是很典型的 Win32 错误,本文介绍如何修复此错误。

    System.InvalidOperationException:“寄宿的 HWND 必须是指定父级的子窗口。”

    2019-08-14 08:32

    当试图在 WPF 窗口中嵌套显示 Win32 子窗口的时候,你有可能出现错误:“寄宿的 HWND 必须是指定父级的子窗口。”。

    这是很典型的 Win32 错误,本文介绍如何修复此错误。

    如何创建一个基于 MSBuild Task 的跨平台的 NuGet 工具包

    2019-08-07 06:50

    MSBuild 的 Task 为我们扩展项目的编译过程提供了强大的扩展性,它使得我们可以用 C# 语言编写扩展;利用这种扩展性,我们可以为我们的项目定制一部分的编译细节。NuGet 为我们提供了一种自动导入 .props 和 .targets 的方法,同时还是一个 .NET 的包平台;我们可以利用 NuGet 发布我们的工具并自动启用这样的工具。

    制作这样的一个跨平台 NuGet 工具,我们能够为安装此工具的项目提供自动的但定制化的编译细节——例如自动生成版本号,自动生成某些中间文件等。

    本文更偏向于入门,只在帮助你一步一步地制作一个最简单的 NuGet 工具包,以体验和学习这个过程。然后我会在另一篇博客中完善其功能,做一个完整可用的 NuGet 工具。

    如何创建一个基于命令行工具的跨平台的 NuGet 工具包

    2019-08-07 06:50

    命令行可是跨进程通信的一种非常方便的手段呢,只需启动一个进程传入一些参数即可完成一些很复杂的任务。NuGet 为我们提供了一种自动导入 .props 和 .targets 的方法,同时还是一个 .NET 的包平台;我们可以利用 NuGet 发布我们的工具并自动启用这样的工具。

    制作这样的一个跨平台 NuGet 工具,我们能够为安装此工具的项目提供自动的但定制化的编译细节——例如自动生成版本号,自动生成某些中间文件等。

    本文更偏向于入门,只在帮助你一步一步地制作一个最简单的 NuGet 工具包,以体验和学习这个过程。然后我会在另一篇博客中完善其功能,做一个完整可用的 NuGet 工具。

    好的框架需要好的 API 设计 —— API 设计的六个原则

    2019-08-05 04:20

    说到框架设计,打心底都会觉得很大很宽泛,而 API 设计是框架设计中的重要组成部分。相比于有很多大佬都认可的面向对象的六大原则、23 种常见的设计模式来说,API 设计确实缺少行业公认的原则或者说设计范式。

    不过,没有公认不代表没有。无论是对外提供类库还是提供 url 形式的 API,为了使用者良好的使用体验,依然也是有可以借鉴和参考的经验的。

    通过 mklink 收集本地文件系统的所有 NuGet 包输出目录来快速调试公共组件代码

    2019-08-04 13:17

    我们做的公共库可能通过 nuget.org 发布,也可能是自己搭建 NuGet 服务器。但是,如果某个包正在开发中,需要快速验证其是否解决掉一些诡异的 bug 的话,除了单元测试这种间接的测试方法,还可以在本地安装未发布的 NuGet 包的方法来快速调试。

    本文介绍如何本地打包发布 NuGet 包,然后通过 mklink 收集所有的本地包达到快速调试的目的。

    使用 C# 中的 dynamic 关键字调用类型方法时可能遇到的各种问题

    2019-08-04 06:58

    你可以使用 dynamic 来定义一个变量或者字段,随后你可以像弱类型语言一样调用这个实例的各种方法,就像你一开始就知道这个类型的所有属性和方法一样。

    但是,使用不当又会遇到各种问题,本文收集使用过程中可能会遇到的各种问题,帮助你解决掉它们。

    • ←
    • 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