笔者一直使用VS2008编写一些小程序。前几天,重装了一次操作系统。用Ghost文件恢复后,却发现VS2008无法再使用了,提示:“Visual Studio 试用版到评估期已经结束。”VS2008过期了,要求升级。 点击关闭后,VS2008直接退出了。笔者分析了一下,这主要是由于之前用了试用版的程序,90天时间早就过了。当然,我们可以用在VS2008维护模式下,输入正版的序列号。升级到正式版。
归档 .NET平台
微软…微软
c#写带行号的richTextBox 修正版
笔者最近在打造自己的博客自动发布程序,其中设计到编辑器的代码编写。一个基本的web编辑器包括所见即所得编辑器、源代码编辑器、以及预览部分。基本UI如下图: 在xhtml编辑器部分需要richtextbox带有显示行号和代码高亮的功能。于是google之,网上资源丰富,笔者在参考权衡之后决定使用c#写带行号的richTextBox 一文中的代码。不过在调试的时候却出了一点问题。 代码是正确的,但是却怎么也显示不了头6行的行号。笔者非常纳闷,发现richtextbox控件GetCharIndexFromPosition函数无法正确返回字符索引这个缺陷所致。于是,再仔细查看代码,将原代码中第一行 Point p = this.richTextBox1.Location; 修改为 Point p = new Point(0,0); 在此编译后就正确了。 下面给出完整代码:
C#编程 jpg缩略图函数
/// <summary> /// 生成jpg缩略图字节,本人的小软件中需要用到的功能,所以自己做了一个函数,和大家分享 /// 为什么要生成字节而不是文件,这是为了方便后续处理啦^_^ /// </summary> /// <param name=”originalImagePath”>原始路径</param> /// <param name=”quality”>质量0-100</param> /// <param name=”width”>宽度</param> /// <param name=”height”>高度</param> /// <param name=”mode”>模式:HW,W,H,Cut</param> /// <returns></returns> public static byte[] MakeJPGThumbnailBytes(string originalImagePath, long quality, int width, int height, string mode) { Image originalImage = Image.FromFile(originalImagePath); [...]
高效的c#线程池设计
昨天写的 基于信号量Semaphore的c#线程池设计 在实际使用中,容易造成CPU占用偏高,笔者分析认为是由于信号量本身的缺点造成的,因此笔者重新设计了一款更高效的c#线程池,完全不使用waithandle之类的阻塞线程,而是使用更为简单的最大线程数值(一个long整数)来控制线程的运行。如果超过指定的线程数,那么保存在hash表中的线程进入等待队列,当有空闲位置时,才会释放出一个等待队列中的线程启动并运行。 笔者粗略地计算了下,此种方法比基于信号量的效率要高30左右,性能提高是显著的^_^,下面为大家展示代码。 public class MyThreadManager : MyThreadPool, iThreadManager { //线程池的启动、停止控制大同小异,不再赘述 private bool bStart; private bool bPause; private bool bStoped; public bool Running { get { return bStart && !bPause && !bStoped; } } public MyThreadManager(int num):base(num) { ControlCallback = new ThreadControl(Run); bStart [...]
基于信号量Semaphore的c#线程池设计
c#线程池的设计对于多线程程序来说相当重要,而系统自带的线程池ThreadPool有很多缺陷,包括无法暂停和停止等。基于这个原因,笔者自行设计了几款线程池,今天先发布的是基于信号量Semaphore的线程池设计。优点是:结构清晰、代码简洁。缺点是:由于需要有用户模式切换到内核模式,效率较低。 这里就不给出信号量的基本编程原理了,直接上代码^_^ using System; using System.Threading; /************************************************************** * Thread Manager 类 * Author:freemouse * E-mail:freemoue1981@gmail.com * website: http://www.cnphp.info * date: 2010-12-9 * ***********************************************************/ namespace Freemouse.Base.ThreadManage { /// <summary> /// 基于信号量的多线程管理器 /// </summary> public class ThreadManager : SemaphoreThreadPool, iThreadManager { /// <summary> /// 控制启动、停止 /// </summary> private [...]
c# 多线程代码之美
c# 多线程控制的方法有很多种,然而如何优雅地控制多线程却是门学问。笔者一直也纠结于此,失败的多线程设计绝对是画虎不成反类猫,不但没有提高性能,效率反而会更低。 下面的一段代码使用了信号量对多线程进行控制,希望读到的朋友能体会到优雅的代码所带来的乐趣。也希望高手们提供更高明的方法。 using System; using System.Threading; namespace MyLab { public delegate void handler(object obj); public class Program { /// <summary> /// 信号量用于控制最大并发线程数 /// </summary> private static Semaphore pool; /// <summary> /// 用于控制暂停、继续 /// </summary> private static ManualResetEvent status; private static int count [...]
c#进程间通讯方案之IPC通道
最近一直纠结与使用多进程还是多线程来构建程序。多线程的方法似乎不错,但是一个进程可承受的线程数有有限的,并且由于每个线程都与UI有着些许关系,线程的工作大多数时间浪费在阻塞上了,效率实在不是很高。 笔者遂在google上搜索进程间通讯的方案。发现有很多种,其中IPC通道似乎是个不错的选择,支持本机的进程间通讯,可以作为备选方案之一,下面介绍以下基本的编程方法,以作备忘。 首先建立一个IPC通讯中使用的对象,其中MarshalByRefObject 是必须的 using System; namespace Ipctest { public class test:MarshalByRefObject { private int iCount = 0; public int count() { iCount++; return iCount; } public int Add(int x) { iCount += x; return iCount; } } } 接着建一个服务端控制台程序 using System; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Ipc; namespace Ipctest { class Program { static [...]
C#编程 Html table 解析器
html中的表格一般都存储着比较重要的信息,虽然现在css+div已是主流,但笔者还是不建议把信息添加到div中,过度的使用div标签一样是一场灾难^_^。下面的代码可以解析html table,感兴趣的朋友可以看看。
c#编程 RSS2.0解析器代码
最近工作比较忙,加上杂七杂八的一堆事情,博客也开始长草了=_=。手里现在唯一没有停滞的项目就是笔者的网站发布机的开发。这是其中解析rss文件的代码;个人觉得比较实用,所以把单独提出来,和各位一道分享^_^。用法也相当简单,下面的代码中已经包含了控制台的示例代码,有兴趣的朋友可以看看


