王新阳's profilenewsunPhotosBlogListsMore Tools Help

newsun

Sandbox 简体中文版

Loading...

王新阳

Occupation
Photo 1 of 6

MyLife

   
Friends, please don't be strangers and thanks for all the memories!
May 07

快乐生活

享受生活,激情万岁!找到好工作,生活才快乐!希望找工作的朋友,都能如愿找到好工作!
April 21

为朋友而高兴

看着我的一个朋友慢慢的进入银行,很为他高兴,也是我曾经梦想去的地方,虽然现在早已失去了机会,但是对那个地方的憧憬却没有减弱过。
不论在哪里都要努力工作!加油,我的朋友,我的所有好朋友
March 28

佛曰人生

我问佛:为何不给所有女子羞花闭月的容颜?

佛曰:那只是昙花的一现,用来蒙蔽世俗的眼

没有什么美可以抵过一颗纯净仁爱的心

我把它赐给每一个女子,

可有人让它蒙上了灰

我问佛:世间为何有那么多遗憾?

佛曰:这是一个婆娑世界,婆娑既遗憾,

没有遗憾,给你再多幸福也不会体会快乐   

我问佛:如何让人们的心不再感到孤单?

佛曰:每一颗心生来就是孤单而残缺的,

多数带着这种残缺度过一生

只因与能使它圆满的另一半相遇时

不是疏忽错过,就是已失去了拥有它的资格   

我问佛:如果遇到了可以爱的人,却又怕不能把握该怎么办?

佛曰:留人间多少爱,迎浮世千重变

和有情人,做快乐事

别问是劫是缘
 
我问佛:如何才能如你般睿智?

佛曰:佛是过来人,人是未来佛

我也曾如你般天真

佛门中说一个人悟道有三阶段:勘破、放下、自在。

的确,一个人必须要放下,才能得到自在。
 
December 28

Visual Studio 使用嵌入资源

Dotnet中嵌入资源(位图、图标或光标等)有两种方式,一是直接把资源文件加入到项目,作为嵌入资源,在代码中通过AssemblyGetManifestResourceStream方法获取资源的Stream。另一种方法是在项目中加入. resx资源文件,在资源文件中添加资源,由ResourceManager类统一管理其中的资源。

下面分别详述这两种方法

一、 使用GetManifestResourceStream读取嵌入资源

1、 加入资源文件

直接把要嵌入到程序集的资源文件加入到项目中,可以加在项目的根目录,可以加在项目的任何目录中。

2、 设置资源文件的“BuildAction”属性

将嵌入资源文件的“BuildAction”属性设置为“Embedded Resource

3、 代码中使用嵌入资源

//获得正在运行类所在的名称空间

Type type = MethodBase.GetCurrentMethod().DeclaringType;

string _namespace = type.Namespace;

//获得当前运行的Assembly

Assembly _assembly = Assembly.GetExecutingAssembly();

//根据名称空间和文件名生成资源名称

string resourceName = _namespace + ".directory.BitmapManifest.bmp";

//根据资源名称从Assembly中获取此资源的Stream

Stream stream = _assembly.GetManifestResourceStream(resourceName);

Image myImage = Image.FromStream(stream);

注意资源名称的组成规则:

项目默认名称空间.资源在项目中所在目录.资源文件名

上面代码中BitmapManifest.bmp位图就在项目的directory目录下。如果资源文件直接在项目根目录,则为项目默认名称空间.资源文件名

再给一个xml资源的例子:

//获得正在运行类所在的名称空间

Type type = MethodBase.GetCurrentMethod().DeclaringType;

string _namespace = type.Namespace;

//获得当前运行的Assembly

Assembly _assembly = Assembly.GetExecutingAssembly();

//根据名称空间和文件名生成资源名称

string resourceName = _namespace + ".XMLFileTest.xml";

//根据资源名称从Assembly中获取此资源的Stream

Stream stream = _assembly.GetManifestResourceStream(resourceName);

XmlDocument xmlDoc = null;

xmlDoc = new XmlDocument();

xmlDoc.Load(stream);

二、 使用. resx资源文件嵌入资源

1、 新建资源文件

在项目中新建一个资源文件,资源文件以.resx为后缀,同时还会新建一个跟资源文件同名的Designer.cs文件。

其实资源文件最大的用处是用来做多语言版本的软件时保存不同语言的资源,比如不同语言的菜单文本,可以把不同语言的字符串放在同一个资源类型下的不同资源包中,程序运行时根据运行时系统的culture选择不同的包显示不同语言的字符串。这里我们不关心多语言的资源的应用,所有略过这部分。

新建了资源文件后就能往资源文件中添加资源文件:

clip_image001

Figure.1 .resx资源文件可嵌入的资源类型

资源中可以添加字符串、位图、图标、音频、文件等等的资源。

添加的资源都会被保存在项目的Resources文件夹中。

2、 设置资源文件的“BuildAction”属性

Resources文件夹中的所有资源文件的“BuildAction”属性设置为“Embedded Resource”。

3、 资源存在方式

.resx资源文件管理的资源可以用两种存在形式,一种是以一般的文件形式存在于Resources文件夹中,另一个是经过Base64编码后嵌入到.resx资源文件中。

clip_image002

Figure.2 .resx资源文件中资源存在方式

打开.resx资源文件,选择资源,在属性中Persistence属性决定资源的存在形式。资源的两种存在形式,在代码中调用都是一样的。

4、 代码中使用嵌入资源

//获得正在运行类所在的名称空间

Type type = MethodBase.GetCurrentMethod().DeclaringType;

string _namespace = type.Namespace;

//获取当前主程序集

Assembly currentAssembly = Assembly.GetExecutingAssembly();

//资源的根名称

string resourceRootName = _namespace + ".ResourceTest";

//实例化资源管理类

ResourceManager resourceManager = new ResourceManager(resourceRootName, currentAssembly);

//根据资源名获得资源对象

Icon myIcon = (Icon)resourceManager.GetObject("IconTest");

注意资源的根名称的规则:

资源的根名称就是这个资源文件类的全名称。打开.resx资源文件相应的Designer.cs文件能看到资源类的全名称:名称空间.资源类名

资源名:

资源名就是某个资源在.resx资源文件中的名称,打开.resx资源文件可以看到各个资源的名称。上面图中图标文件IconTest.ico的名称是IconTest

摘自:http://dotnet.itpub.net/

July 28

单例模式

  单例模式提供一个全局的访问点,并且让外部无法对该类进行new()

 典型的单例模式版本: 

    public sealed class Singleton
    {
        static Singleton instance = null;
        static readonly object padlock = new object();
        Singleton()
        {
        }
        public static Singleton Instance
        {
            get
            {
                lock (padlock)
                {
                    if (instance == null)
                    {
                        instance = new Singleton();
                    }
                    return instance;
                }
            }
        }
    }

使用了lock关键字,确保只能有一个线程可以访问它。

更完整的说明:http://www.yoda.arachsys.com/csharp/singleton.html