RSS 2.0 Feed
2005-02 Entries
摘要:比如下面代码: using System;class Class1{ [STAThread] static void Main(string[] args) {  int m = add(1,2);  Console.WriteLine(m);  Console.ReadLine(); } private static int add(int i,int j) {  try  {   Console.WriteLine("haha1");   return i + j;   Console.WriteLine("haha2");  }  finally  {   Console.WriteLine("haha3");  } }}执行的结果是:haha1haha33 这样如果我们一个函数中,有多个地方都要返回,我们就可以统一把资源的释放放在finally中完成。而不用再每一个return前都释放。...[阅读全文]

posted @ | Feedback (17) | Filed Under [ .net 编程心得 ]

摘要:在阅读 Enterprise Library 代码的时候,我们可以看到 Enterprise Library 的测试代码和实现功能代码是在一个项目中的。这么做的好处在于: 测试跟实现代码放在一起,我们就可以测试 internal 的方法函数。参见对 internal 的定义:internal 关键字是类型和类型成员的访问修饰符。内部成员只有在同一程序集中的文件内才是可访问的。http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/csref/html/vclrfInternalPG.asp 测试代码和具体实现代码在一个项目中,这时候我们就需要区分测试版和运行版,就类似于编译工程有Debug版和Release版一样。 在 Enterprise Library 的项目中,我们可以看到,编译一个项目的时候,有六个编译选项,而不是以前默认只有的两个编译选项,如下图: 对应的编译出来的版本,就具有或者不具有对应的某一部分功能。我们如果要作单元测试,只需要编译出对应的版本既可以,在发布的时候,发布一个Release版本,这个版本就会不包含单元测试代码。 有关如何增加这些编译选项,并对应的起作用,请看我整理的文章:http://blog.joycode.com/ghj/articles/44720.aspx...[阅读全文]

posted @ | Feedback (7) | Filed Under [ .net 编程心得 技术随笔 ]

摘要:在 Enterprise Library 的代码中,几乎每个项目我们都可以看到一个SR.strings 这样的文件。这样的文件是为系统支持各个语言版本所作的工作。简单来说,你需要在 SR.strings 中,书写各个本地化版本的异常信息、提示信息等信息。然后使用 String Resource Generator 工具产生对应的 .resx 文件以及对应的CS文件。 这样在代码中调用这个信息就可以用类似下面的代码进行调用:     this.primitivesResultsTextBox.Text +=      SR.AddItemToCacheMessage(product.ProductID, product.ProductName, product.ProductPrice,     this.enterNewItemForm.Expiration.ToString(),     this.enterNewItemForm.Priority.ToString()) + "\r\n";其中的SR类中的所有方法、属性,都是通过String Resource Generator 工具根据SR.strings 文件的配置生成的。 这个工具是 Martin 开发的。有关这个工具的更加详细信息可以看:http://projectdistributor.readify.net/Projects/Project.aspx?projectId=2或者是 Martin 的Blog。...[阅读全文]

posted @ | Feedback (10) | Filed Under [ .net 编程心得 技术随笔 ]

摘要:如果你在Form中绘图的话,不论是不是采用的双缓存,都会看到图片在更新的时候都会不断地闪烁,解决方法就是在这个窗体的构造函数中增加以下三行代码: 请在构造函数里面底下加上如下几行:SetStyle(ControlStyles.UserPaint, true);SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景.SetStyle(ControlStyles.DoubleBuffer, true); // 双缓冲 参数说明: UserPaint 如果为 true,控件将自行绘制,而不是通过操作系统来绘制。此样式仅适用于派生自 Control 的类。 AllPaintingInWmPaint 如果为 true,控件将忽略 WM_ERASEBKGND 窗口消息以减少闪烁。仅当 UserPaint 位设置为 true 时,才应当应用该样式。  DoubleBuffer 如果为 true,则绘制在缓冲区中进行,完成后将结果输出到屏幕上。双重缓冲区可防止由控件重绘引起的闪烁。要完全启用双重缓冲,还必须将 UserPaint 和 AllPaintingInWmPaint 样式位设置为 true。 参考资料:如何解决CSharp中动画闪烁问题?http://search.csdn.net/Expert/topic/1488/1488888.xmlC#中双缓存绘图的实现方法。 http://blog.joycode.com/ghj/archive/2004/01/03/10543.aspx 以上你不是在窗体上绘图,需要你自己写一个控件,在这个控件的构造函数上增加上上述三行代码。...[阅读全文]

posted @ | Feedback (21) | Filed Under [ .net 编程心得 技术随笔 ]