用 C# 从图片的 EXIF 信息中读取拍摄地点 GEO 坐标

本来觉得应该挺简单的一个事,没想到 EXIF 中记录的原始数据是 “度分秒” 格式的 byte[],而且还用到另一个 byte[] 记录东南西北方向。但现在许多 API 都是以 “度” 为单位的,例如 123.456789,要使用这些 API 还要转换一下格式。找了几篇 StackOverflow 的帖子,把不同答案中最简练的部分提取出来,封装成一个简单的类,以备后用吧。using Syst...

不闪的 才是健康的 —— 让 Winform 控件不再闪烁

俗话说「不闪的,才是健康的」。做 Winform 应用的时候经常会用到 ListView 控件,而如果频繁更新 ListView 中的内容则会一闪一闪的非常不舒服,用户体验极差。其实解决这个问题也很简单,下面提供两套方案,适用于不同情况。1. 自定义 ListView 控件如果项目中有多处地方用到 ListView,那我们可以自定义一个 ListView 并重写其中的样式行为方法,让其使用双...

简单实现 .NET 多线程的任务队列

这是一个听起来既异步又同步的概念,然而在实际编程的时候经常会碰到的「业务逻辑」,尤其是在涉及网络操作的时候。这里我用一个最简单、最实际的例子来帮助描述,那就是「刷票」。齐头并进在刷票的时候,如果一票一票的刷,那就太没效率了。假设刷一票总共需要 3 次网络操作,每次平均 1 秒完成,算下来一分钟才刷 20 票。这时候我们就需要多个刷票任务齐头并进,也就是进入多线程模式,这样可以 10 个、或更...

轻松解决在一个虚拟主机上运行多个 .NET 应用

不知道有没有朋友像我一样会遇到这样一个问题:在网上购买 .NET 空间,由于虚拟主机的限制,并不能把某个目录设为一个独立的应用,或者一些价格比较高的空间,虽然可以设置,但数量也是有限的。这个问题导致了在给网站扩展独立功能的时候,比较被动,或者想在一个网站下跑几个不同功能的应用,也很麻烦。不过,在最近我发现了一个非常简单的方法,可以巧妙的避开这个问题。简单来说就两点:统一 bin 目录:把所有...

巧用 .NET 中的「合并运算符」获得 URL 中的参数

获取 URL 中的 GET 参数,无论用什么语言开发网站,几乎是必须会用到的代码。但获取 URL 参数经常需要注意一点就是要先判断是否有这个参数存在,如果存在则取出,如果不存在则用另一个值。这个运算称为「null 合并运算」,在 JavaScript 中常见的 || 就是这个意思。今天无意中在 .NET 中也看到了「null 合并运算符」,与 JavaScript 不同的是,它是用 ?? 表...