归档 .NET平台

微软…微软

VS2008过期解决方法

笔者一直使用VS2008编写一些小程序。前几天,重装了一次操作系统。用Ghost文件恢复后,却发现VS2008无法再使用了,提示:“Visual Studio 试用版到评估期已经结束。”VS2008过期了,要求升级。 点击关闭后,VS2008直接退出了。笔者分析了一下,这主要是由于之前用了试用版的程序,90天时间早就过了。当然,我们可以用在VS2008维护模式下,输入正版的序列号。升级到正式版。

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文件的代码;个人觉得比较实用,所以把单独提出来,和各位一道分享^_^。用法也相当简单,下面的代码中已经包含了控制台的示例代码,有兴趣的朋友可以看看

C#编程开发 Berkeley DB SQL使用指南

Berkeley DB来自于Oracle,是一个高性能、嵌入式的数据库。Berkeley DB支持多种语言操作如c、c++、c#、java、perl、python、tcl等。支持同时数千线程访问操作数据库,最大256TB存储数据,广泛应用于linux、window以及其他平台。 传统的Berkeley DB只支持键/值对的存储方式,而不支持关系数据库。这在一定程度上限制了Berkeley DB的应用范围,虽然Berkeley DB依然很优秀,但是也要与时俱进嘛。 Berkeley DB在最新的版本中加入了对SQL语言的支持。全面兼容SQLite3的语法,这就为广大编程人员提供了更丰富的选择。因为,简单与复杂总是并存的,一款简单与复杂查询都支持的数据库产品,想必很受亲睐。

    第 1 页,共 2 页12