摘要: 如果你的团队没有觉得微信是低效的团队 IM 工具,那只有两种可能:团队成员很少使用微信进行私人的生活和娱乐。你就是一个低效的团队,而且还不自知。本文内容微信,连接一切每个人都有微信微信,低成本的沟通方式不间断的交叉消息干扰不止是消息的交叉干扰别随便什么事儿都... 阅读全文
posted @ 2019-01-27 13:47 walterlv 阅读(718) 评论(2) 推荐(0) 编辑
摘要: bool? 实际上是 Nullable<Boolean> 类型,可以当作三值的 bool 类型来使用。不过三值的布尔进行与或运算时的结果与二值有什么不同吗? 本文内容 重载条件逻辑运算符“与”(&&)“或”(||) 三值 bool? 的与或结果 参考资料 本文内容 重载条件逻辑运算符“与”(&&)“ 阅读全文
posted @ 2019-01-27 13:46 walterlv 阅读(648) 评论(0) 推荐(0) 编辑
摘要: 一个工程师团队使用 Slack 进行团队协作比 QQ / 微信流的效率高多啦。除了基本的 IM 之外,它的扩展性也是非常重要的一点。 本文介绍 Slack 的开发入门:Incoming Webhooks 篇。 本文内容 创建一个新 Slack 应用 创建 Webhooks 应用 添加一个 Webho 阅读全文
posted @ 2019-01-27 13:45 walterlv 阅读(2899) 评论(1) 推荐(1) 编辑
摘要: 使用 Nullable<T> 我们可以为原本不可能为 null 的值类型像引用类型那样提供一个 null 值。不过注意:Nullable<T> 本身也是个 struct,是个值类型哦。这意味着你随时可以调用 .HasValue 这样的方法,而不用担心会出现 NullReferenceExceptio 阅读全文
posted @ 2019-01-27 13:42 walterlv 阅读(1422) 评论(0) 推荐(1) 编辑
摘要: Mutex 是 Mutual Exclusion 的缩写,是互斥锁,用于防止两个线程同时对计算机上的同一个资源进行访问。不过相比于其他互斥的方式,Mutex 能够跨越线程边界。 本文内容 Mutex 是什么? 简单的 Mutex(不能跨进程互斥) 创建跨进程互斥的 Mutex 处理异常情况 Appl 阅读全文
posted @ 2019-01-27 13:39 walterlv 阅读(760) 评论(0) 推荐(0) 编辑
摘要: UWP 中使用 WebView 时可以在网页中额外执行一些代码。于是你几乎可以在网页上做任何事情,那些你可以在浏览器控制台中做的事情。本文将介绍做法。本文内容准备环境执行 JavaScript 代码模拟用户输入JavaScript eval(string) ... 阅读全文
posted @ 2019-01-27 13:35 walterlv 阅读(320) 评论(0) 推荐(0) 编辑
摘要: 如果你在代码中使用了 FileInfo.Exists 实例方法来判断一个文件是否存在,也许会发现此方法可能错误地判断来一个文件是否真的存在。这是一个坑。 本文将介绍坑的原因,并提供填坑的办法。 本文内容 问题代码 原因分析 解决办法 本文内容 问题代码 原因分析 解决办法 问题代码 原因分析 解决办 阅读全文
posted @ 2019-01-27 13:33 walterlv 阅读(1480) 评论(0) 推荐(0) 编辑
摘要: 我想要截取一个 WPF 程序的图标,但是它太小了。如果我就这样截屏截下来,是很不高清的。由于我需要制作一份课件,所以我需要超高清版本,可是,如何做才能最快速拿到 WPF 程序的超高清截图呢?本文分享一个方法,只需 5 秒钟,你就能拿到!第一步:打开 Snoo... 阅读全文
posted @ 2019-01-27 13:31 walterlv 阅读(589) 评论(0) 推荐(0) 编辑
摘要: 如果需要为 GitHub 上的项目做贡献,我们通常会 Fork 到自己的名称空间下。在推送代码之后添加 pull request 时,GitHub 会自动为我们跨仓库建立 pull request 的连接,非常方便。但是,如果 Fork 是出于项目的迁移,例如从个人名下迁移到某个组织下或者反过来,那 阅读全文
posted @ 2019-01-27 13:30 walterlv 阅读(912) 评论(0) 推荐(0) 编辑
摘要: 使用拼音/双拼输入法,如果你的打字速度还需要继续提升,那么就不应该再不断地看着候选框打字了。使用双拼形码可以规避相当多字词的选字。本文整理自然码的形码,然后附带一张我自己制作的自然码形码的键盘图。本文内容输入法的选择自然码的形码键盘图参考链接输入法的选择目前... 阅读全文
posted @ 2019-01-27 13:27 walterlv 阅读(4648) 评论(0) 推荐(0) 编辑
摘要: 我们在代码中会写 #if DEBUG 或者 [Conditional("DEBUG")] 来使用已经定义好的条件编译符号。而定义条件编译符号可以在代码中使用 #define WALTERLV 来实现,也可以通过在项目属性中设置条件编译符号(Conditional Compilation Symbol 阅读全文
posted @ 2019-01-01 11:01 walterlv 阅读(304) 评论(0) 推荐(0) 编辑
摘要: 条件编译符号指的是 Conditional Compilation Symbols。你可以在 Visual Studio 的项目属性中设置,也可以直接在项目文件中写入 DefineConstants 属性。 不过对于不同种类的项目,我建议使用不同的设置方法。本文将介绍如何设置条件编译符。 对于新旧格 阅读全文
posted @ 2019-01-01 11:00 walterlv 阅读(6577) 评论(2) 推荐(2) 编辑
摘要: 本文将介绍如何在 Windows 10 中开启移动 Wi-Fi 热点。 This post is written in multiple languages. Please select yours: 在 Windows 10 中开启移动 WLAN 热点 - walterlv Turn on Mob 阅读全文
posted @ 2019-01-01 10:59 walterlv 阅读(449) 评论(0) 推荐(0) 编辑
摘要: 林德熙 小伙伴希望保存一个文件,并且希望如果出错了也要不断地重试。然而我认为如果一直错误则应该对外抛出异常让调用者知道为什么会一直错误。 这似乎是一个矛盾的要求。然而最终我想到了一个办法:让重试一直进行下去,谁需要关心异常谁就去 catch 异常,不需要关心异常的模块则跟着一直重试直到成功。 我们通 阅读全文
posted @ 2019-01-01 10:58 walterlv 阅读(1603) 评论(0) 推荐(0) 编辑
摘要: 最近有小伙伴问我如何可以让 Windows 静置一段时间不操作之后,显示一个特殊的界面。我想了想,屏幕保护程序可以做到这一点,而且,屏幕保护程序的开发也是非常简单的。 本文将介绍如何为 Windows 这一悠久的功能进行开发。 本文内容 屏幕保护程序的本质 安装屏幕保护程序 处理屏幕保护程序参数 请 阅读全文
posted @ 2019-01-01 10:57 walterlv 阅读(1313) 评论(0) 推荐(0) 编辑
摘要: 你可以使用临界区(Critical Section)、互斥量(Mutex)、信号量(Semaphores)和事件(Event)来处理线程同步。然而,在编写一些异步处理函数,尤其是还有 async 和 await 使用的时候,还有一些更方便的类型可以用来处理线程同步。 使用 TaskCompletio 阅读全文
posted @ 2019-01-01 10:56 walterlv 阅读(497) 评论(0) 推荐(0) 编辑
摘要: CommandLineParser 是一款用于解析命令行参数的 NuGet 包。你只需要关注你的业务,而命令行解析只需要极少量的配置代码。 本文将介绍如何使用 CommandLineParser 高效写出自己程序的命令行解析部分。 本文内容 NuGet 包和 GitHub 开源仓库 最简单的命令行解 阅读全文
posted @ 2019-01-01 10:55 walterlv 阅读(5771) 评论(0) 推荐(2) 编辑
摘要: 当你需要监视文件或文件夹的改变的时候,使用 FileSystemWatcher 便可以完成。不过,FileSystemWatcher 对文件夹的监视要求文件夹必须存在,否则会产生错误“无效路径”。 那么,如果文件或文件夹不存在的时候可以怎么监视文件的改变呢?更麻烦的是如果顶层很多级文件夹都不存在,怎 阅读全文
posted @ 2019-01-01 10:54 walterlv 阅读(1407) 评论(0) 推荐(0) 编辑
摘要: StyleCop 本质上是一个 C# 源代码规则分析器,可以帮助团队成员强制执行一组代码样式和一致性规则。 本文将简述 StyleCop 以及它能为团队带来的价值。 本文内容 StyleCop 是什么? StyleCop 能做什么,不能做什么? StyleCop 的优势和价值 本文内容 StyleC 阅读全文
posted @ 2019-01-01 10:52 walterlv 阅读(1328) 评论(0) 推荐(0) 编辑
摘要: StyleCop 可以帮助强制执行代码格式化规范,ReSharper 可以帮助你更高效地编写代码。把两者结合起来,你便能高效地编写符合团队强制格式化规范的代码来。 本文就介绍如何使用 ReSharper 来高效地遵循 StyleCop 的代码格式化规范。 本文内容 安装插件 StyleCop by 阅读全文
posted @ 2019-01-01 10:51 walterlv 阅读(1076) 评论(0) 推荐(0) 编辑
摘要: 我在之前的博客中有教大家如何编写 NuGet 工具包,其中就有编写 .targets 文件。 我在实际的使用中,发现 Visual Studio 2017 带来的含 Sdk 的新 csproj 格式基本上没有多少坑;然而旧的 csproj 文件却总是不能完美的运行,总是出错。关键是,不是每台电脑都出 阅读全文
posted @ 2018-12-23 15:17 walterlv 阅读(398) 评论(0) 推荐(0) 编辑
摘要: 我们已经知道 Task 是可等待的,但是去看看 Task 类的实现,几乎找不到哪个基类、接口或者方法属性能够告诉我们与 await 相关。 而本文将探索什么样的类是可使用 await 异步等待的? Dixin’s Blog - Understanding C# async / await (2) T 阅读全文
posted @ 2018-12-23 15:16 walterlv 阅读(552) 评论(0) 推荐(0) 编辑
摘要: .NET 中的 async / await 写异步代码用起来真的很爽,就像写同步一样。我们可以在各种各样的异步代码中看到 Task 返回值,这样大家便可以使用 await 等待这个方法。不过,有时需要写一些特别的异步方法,这时需要自己来实现一个可以异步等待的对象。 本文将讲述如何实现一个可等待对象, 阅读全文
posted @ 2018-12-23 15:13 walterlv 阅读(401) 评论(0) 推荐(0) 编辑
摘要: 我在几篇文章中都说到了在 .NET 中自己实现 Awaiter 情况。async / await 写异步代码用起来真的很爽,就像写同步一样。然而实现 Awaiter 没有现成的接口,它需要你按照编译器的要求为你的类型添加一些具有特定名称的属性和方法。然而没有接口的帮助,我们编写起来就很难获得工具(如 阅读全文
posted @ 2018-12-23 15:11 walterlv 阅读(368) 评论(0) 推荐(0) 编辑
摘要: WPF 中为了 UI 的跨线程访问,提供了 Dispatcher 线程模型。其 Invoke 方法,无论在哪个线程调用,都可以让传入的方法回到 UI 线程。 然而,如果你在 Lazy 上下文中使用了 Invoke,那么当这个 Lazy<T> 跨线程并发时,极有可能导致死锁。本文将具体说说这个例子。 阅读全文
posted @ 2018-12-23 14:59 walterlv 阅读(2319) 评论(0) 推荐(1) 编辑
摘要: AutoResetEvent、ManualResetEvent、Monitor、lock 等等这些用来做同步的类,如果在异步上下文(await)中使用,需要非常谨慎。 本文将说一个在同步上下文中非常常见的一种用法,换成异步上下文中会产生死锁的问题。 本文内容 一段正常的同步上下文的代码 一个微调即会 阅读全文
posted @ 2018-12-23 14:58 walterlv 阅读(655) 评论(0) 推荐(0) 编辑
摘要: 一个简单的 Task 不会消耗多少时间,但如果你不合适地将 Task 转为同步等待,那么也可能很快耗尽线程池的所有资源,出现类似死锁的情况。 本文将以一个最简单的例子说明如何出现以及避免这样的问题。 本文内容 耗时的 Task.Run 最简复现代码 原因 解决 更多死锁问题 本文内容 耗时的 Tas 阅读全文
posted @ 2018-12-23 14:57 walterlv 阅读(670) 评论(0) 推荐(0) 编辑
摘要: .NET Framework 4.5 开始引入 Task.Run,它可以很方便的帮助我们使用 async / await 语法,同时还使用线程池来帮助我们管理线程。以至于我们编写异步代码可以像编写同步代码一样方便。 不过,如果滥用,也可能导致应用的性能急剧下降。本文将说明在默认线程池配置(Threa 阅读全文
posted @ 2018-12-23 14:56 walterlv 阅读(1937) 评论(0) 推荐(0) 编辑
摘要: 在 Connect(); 2018 大会上,微软发布了 .NET Core 3 Preview,以及基于 .NET Core 3 的 WPF;同时还发布了 Visual Studio 2019 预览版。你可以基于 .NET Core 3 创建 WPF 程序。不过,如果你已经有基于 .NET Fram 阅读全文
posted @ 2018-12-06 10:31 walterlv 阅读(844) 评论(0) 推荐(0) 编辑
摘要: 在 Connect(); 2018 大会上,微软发布了 .NET Core 3 Preview,以及基于 .NET Core 3 的 WPF;同时还发布了 Visual Studio 2019 预览版。不过 Visual Studio 2019 的预览版中并没有携带 WPF on .NET Core 阅读全文
posted @ 2018-12-06 10:29 walterlv 阅读(1420) 评论(0) 推荐(0) 编辑