代码改变世界

随笔分类 -  C#

C# 中使用不安全代码(unsafe、指针)实践

2013-09-03 11:30 by uonun, 2248 阅读, 收藏, 编辑
摘要: 根据指定的字符集合(字典),按排列组合的规则(允许重复),生成指定长度的所有字符串。 投石问路:假设长度固定 方案一:我们来多循环几次(循环拼接字符串) 方案二:不用字符串,使用不安全代码(循环拼接字符串Unsafe版) 方案三:换个角度看问题(字符串模拟数字依次循环进行进制转换) 方案四:小学的加法运算正闪闪发光(字符串模拟数字依次自增+1) 方案五:再次改写,不用字符串,使用不安全代码(字符串模拟数字依次自增+1的Unsafe版) 方案六:闲来没事(1):Fixed-point combinator 方案七:闲来没事(2):Fixed-point combinator + Unsafe 双剑合璧 阅读全文

Visual Stuido 2010/2012 扩展:Quick Launcher,快速打开指定文件

2013-08-13 16:38 by uonun, 1959 阅读, 收藏, 编辑
摘要: Quick Launcher 是一个极其简单但实用的 Visual Studio 扩展,支持 Visual Studio 2010/2012,它能让你很方便快速地从解决方案中找到你想要的文件并打开它,以避免人工地打开一层层目录寻找,特别是在解决方案日益庞大、文件夹层次较多的情况下,此扩展尤为适用。相同功能类似 Visual Studio 2012 的快速启动和 Eclipse 的Ctrl+Shift+R,但比他们更易用更方便. 你只需在输入关键字后按方向键“下”选定你要打开的文件,再“回车”即可打开文件!从此告别在解决方案中一层层目录寻找文件的痛苦! 阅读全文

.NET中简易实现线程安全

2012-09-10 19:32 by uonun, 466 阅读, 收藏, 编辑
摘要: 在.NET中要实现线程安全,可有多种途径:1. 使用 lock 关键字:1usingSystem;2usingSystem.Threading;34namespaceUDNZ.SynTest5{6classProgram7{8staticint_x=0;9staticint_n=1000000;10staticobject_lock=newobject();1112staticvoidMain(string[]args)13{14EventWaitHandlew1=newEventWaitHandle(false,EventResetMode.AutoReset);15EventWaitHan 阅读全文

CorePlex开发手记:二、Winform与其中的WebBrowser控件的交互

2011-07-10 19:45 by uonun, 784 阅读, 收藏, 编辑
摘要: 一年多以前,写过这么一篇文章:基于IE内核的浏览器:WebBrowser上的网页与Winform本身交互[Demo下载],其中演示了WebBrowser与其宿主Winform之间的交互,实现在WebBrowser的C/S程序中调用其网页上的Javascript函数,甚至反过来在网页的Javascript代码中调用C/S程序中的方法。而最近在开发 CorePlex 的过程中,却无意发现,原来 WebBrowser 本身就有一个用于交互操作的成员:MSDN上这样说:使用该属性启用 WebBrowser 控件承载的网页与包含 WebBrowser 控件的应用程序之间的通信。使用该属性可以将动态 HT 阅读全文

CorePlex开发手记:一、Winform窗体皮肤及简单换肤机制

2011-07-10 19:25 by uonun, 3666 阅读, 收藏, 编辑
摘要: 前言: CorePlex代码库 作为一个Visual Studio插件, 允许用户通过VS直接访问在线代码库。开发过程中我翻阅了很多网上的资料,也总结了一些技术要点,现写成系列文章,以飨读者。同时,里面某些技术也是我第一次使用,如有不对的地方,还请行家狠拍,欢迎大家指正~闲话休絮,进入正题。从本篇文章开始,介绍 CorePlex 的窗体皮肤机制,以及简单的换肤功能。我们先来看看效果:换一个皮肤看看:需要实现的是圆角窗体+四周的阴影,要实现这个,大致的思路是这样的:先使用 Graphics 绘制一个 Bitmap,将需要的皮肤绘制成一个内存图,然后使用 Win32的API:UpdateLayer 阅读全文

基于IE内核的浏览器:WebBrowser上的网页与Winform本身交互[Demo下载]

2010-05-30 12:54 by uonun, 473 阅读, 收藏, 编辑
摘要: 本文旨在演示WebBrowser控件上的代码(Javascript、Html Dom)与Winform控件本身的交互,实现在WebBrowser的C/S程序中调用其网页上的Javascript函数,甚至反过来在网页的Javascript代码中调用C/S程序中的方法。以下示例点到为止,比如“B/S Dom对象的事件”示例中,除了用onchange/onpropertychange之外,其他任何支持的html事件均能使用,如onclick、onkeydown等等。 例子中没有详细列出可以应用的方式和使用范围,但我们加以思考,触类旁通,可以实现很多很多功能的。全文及Demo程序下载见:http:// 阅读全文

c#.NET中开发可用于Web网页的ActiveX控件

2010-04-09 21:40 by uonun, 387 阅读, 收藏, 编辑
摘要: 一、COM可见及GUID项目属性 –> 应用程序 –> 程序集信息:为程序生成一个GUID填写在此处,并勾选“使程序集 COM 可见”二、修改AssemblyInfo.cs文件://添加一行命名空间using System.Security;//添加一行标记[assembly: AllowPartiallyTrustedCallers()]三、类的实现1. 标记GUID[Guid("88E22812-2AFF-4c87-AB0B-D3C650BB9BF8")]public partial class OcxTest : UserControl{}2. 声明IOb 阅读全文

使用HttpWebRequest发送HTTP请求,同时支持GET/POST方式提交。

2010-03-28 18:35 by uonun, 793 阅读, 收藏, 编辑
摘要: 使用HttpWebRequest发送HTTP请求,同时支持GET/POST方式提交。 理论上支持任何HTTP 1.1 协议谓词,不过就实际使用情况来说,仅对GET/POST方式进行了测试,其他谓词并未测试。/// /// 使用HttpWebRequest发送HTTP请求,同时支持GET/POST方式提交。/// /// 要访问的URL地址/// /// 任何HTTP 1.1 协议谓词:GET、HEAD、POST、PUT、DELETE、TRACE 或OPTIONS。/// 页面使用的编码/// /// /// 请注意:/// /// 中如果有中文,则需要使用Uri.EscapeDataStri. 阅读全文

C#中如何获取一个字符串的实际字符数

2010-03-28 18:32 by uonun, 2958 阅读, 收藏, 编辑
摘要: 在包含中文的字符串处理时,除了裁切固定长度的操作之外,有时也需要获取一个字符串的实际字符数,比如我们限制输入框字符数的时候。而C#提供的string.Length属性却无法满足我们的要求,由此,便有了下面这个方法:/// /// 获取字符串长度。与string.Length不同的是,该方法将中文作 2 个字符计算。/// /// 目标字符串/// public static int GetLength(string str){ if (str == null || str.Length == 0) { return 0; } int l = str.Length; int r... 阅读全文

[海康开发笔记]将内存片段格式化为C#类对象时需要注意对象的字段顺序

2010-03-28 18:28 by uonun, 381 阅读, 收藏, 编辑
摘要: 将内存片段byte[] data 格式化为结构或类实例时,结构/类的属性或字段定义顺序将影响格式化结果。如海康设备向注册中心发送的数据表中,包头信息类的定义:/// /// 设备向服务器:MsgRetHeader /// [StructLayout(LayoutKind.Sequential)]public class MsgRetHeader : CmdHeader{ /// /// 海康与平台厂家协商定义的标记,此标记在前端PU与平台对接中保持一致,不能单方面修改,现阶段信令部分为0x53584C54,码流部分为0x53585354 /// public uin... 阅读全文

C#中查询字符串中是否包含指定字符/字符串,使用IndexOf还是Contains?

2010-03-28 18:27 by uonun, 6088 阅读, 收藏, 编辑
摘要: C#中查询字符串中是否包含指定字符/串,使用IndexOf还是Contains?这是一个很常见的命题,以前也没有注意,今天QQ群里有人提起,于是就做了下试验,代码如下:using System;using System.Diagnostics;namespace ConsoleApplication1{ class Program { private const int N = 10000000; private static Stopwatch watch = new Stopwatch(); static void Main(strin... 阅读全文

[.axd]“WebForm_PostBackOptions未定义”及其他相关问题的相关解决方法

2010-03-28 18:24 by uonun, 754 阅读, 收藏, 编辑
摘要: 一个.NET的web项目,本来运行得非常好的,突然之间报了WebForm_PostBackOptions未定义这么个js错误,然后导致了页面无法PostBack,很严重,很生气。顺藤摸瓜,毕竟"WebForm_PostBackOptions"这个东西并不是我自己定义的,看样子,有点像微软的东西,于是便摸到了源代码中的这句:相信做.NET的同仁已经对这句代码都习惯了,这个是微软自动生成的动态JS文件,用于支持ASP.NET中WebForm的一些基本代码。但今天的问题就恰好出在这里,我直接在浏览器访问这个地址,果然,产生了服务器异常,JS根本就没有输出出来。(以下异常由uoLi 阅读全文

C#中使用API(SHFileOperation)进行文件操作,特别说明了回收站相关参数

2010-03-28 18:22 by uonun, 821 阅读, 收藏, 编辑
摘要: 项目中使用了磁盘阵列柜,每秒有上百兆的数据存入磁盘,这就有了从磁盘删除文件的需求。为了满足这一需求,我做了一个用于删除过期数据的系统服务。说来这个东西本身是很简单的,但是由于数据量的巨大价值磁盘阵列空间容量的巨大(8T,1T=1024G),在实际操作中也遇到了不少麻烦。需求很简单,遍历磁盘指定目录下的所有目录和文件,根据一个比较规则判定文件是否过期,如果过期就删除。最初的设计也很简单,三个步骤:遍历 -> 过期检测 -> 删除。有了需求和程序框架设计,于是开始实施。在C#中,DirectoryInfo和FileInfo为我们提供了足够的方法,在程序第一次成型的时候我主要使用了下面的 阅读全文

在C#中截取指定长度的中文字符串(效率提高2500倍)

2010-03-28 18:17 by uonun, 929 阅读, 收藏, 编辑
摘要: C#中字符串截断本没有那么麻烦,问题就出在string.Substring()这个方法将中文也按一个字符计算,导致我们在实际应用中截取字符串(中英文组合)后的“长度”不一致。国际惯例,在网上搜索了一下,大致得到了两中截断算法: 1. 从起始位置取得字符 -> 逐一用正则表达式匹配 -> 拼接成最终字符串。(这是广为流传的方法,也是效率最低的方法。) 2. 从起始位置取得字符 -> 逐一用ASCII比较 -> 再拼接成最终字符串。相比之下,算法2比算法1高明,毕竟ASCII比较比正则表达式的执行效率更高。但最终,我仍然没有使用算法2,而是进行了进一步的优化:public 阅读全文

C#中IP地址与数字之间的互转(网上流传的方法有Bug)

2010-03-28 18:15 by uonun, 417 阅读, 收藏, 编辑
摘要: ConvertIPAddressToNumber项目中有IP与Int32类型相互转换的需求,于是在网上搜索了相关代码,但发现网上的代码有Bug,加以修改发布如下:/// /// 将IPv4格式的字符串转换为int型表示/// /// IPv4格式的字符/// public static int IPToNumber(string strIPAddress){ //将目标IP地址字符串strIPAddress转换为数字 string[] arrayIP = strIPAddress.Split('.'); int sip1 = Int32.Parse(arrayIP[0]); . 阅读全文

uoLib - .Net 项目基础类库 基于C#, 可用于.Net Framework 2.0/3.5, 免费下载使用

2009-04-29 01:56 by uonun, 519 阅读, 收藏, 编辑
摘要: 最新程序发布页面:http://work.udnz.com/uolib/在线帮助文档:http://work.udnz.com/uolib/SDK/CHM帮助文档:http://work.udnz.com/uolib/SDK/uoLib.chm这个类库中包含了大量 .NET 程序所需的基础类,特别是数据库操作类、异常捕获类,已在多个企业级项目中使用。使用uoLib将使您在项目开发更加快捷方便:1. 提供运行时错误的输出、日志记录功能。[强烈推荐]发现问题是解决问题的一半。系统提供了专用于捕获运行时异常的类,可以将这些运行时异常深入地捕获并输出出来。输出格式可以是.txt文本文件、.htm网页文 阅读全文

UoBlog 支持 MetaWeblog Api,可以使用 Windows Live Writer 离线发表日志

2008-10-23 06:03 by uonun, 246 阅读, 收藏, 编辑
摘要: UoBlog 博客系统 内含 MetaWeblog Api,可以通过任何支持该API的客户端程序发表日志。您的 Api 地址应该是:/MetaWeblog.ashxApi 地址示例:http://blog.udnz.com/MetaWeblog.ashx下面以 Windows Live Writer 为例,示意如何配置 MetaWeblog Api 客户端进行离线发表日志。首先,您需要下载 Windows Live Writer .正常安装之后,开始配置。将您的 UoBlog 博客账户添加到Windows Live Writer。如果您在前面的“是否允许 Writer 创建临时日志”处选择了是 阅读全文