Chinaunix首页 | 论坛 | 博客
  • 博客访问: 364208
  • 博文数量: 102
  • 博客积分: 2000
  • 博客等级: 大尉
  • 技术积分: 1116
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-29 16:21
文章分类

全部博文(102)

文章存档

2014年(10)

2011年(1)

2008年(2)

2007年(89)

我的朋友

分类: C#/.net

2014-07-01 22:53:18

1.WPF中的资源路径URL问题
  .pack://application:,,,(路径):表示是添加进方案的资源路径(相对或者绝对);
  .pack://siteoforigin:,,,(路径)表明此处资源与方案的架构没有任何联系,可随机放置;
  .或者不使用前两者,直接f:///c:/1.txt这样;

2.WPF中某些地方需要使用短文件名
 使用GetShortPathName API函数来获取,在dllImport的时候,需要将CharSet设置为Unicode或者Auto(默认为ANSI)

3.WPF中元素的位置
需要先设置高、宽,然后再设置顶点(左or上)才会有效;具体可使用Canvas.SetLeft(ElementName,value)或者直接ElementName.setValue(Canvas.DependencyPreperty.LeftProperty,value)

4.WPF中处理UI线程冲突的办法
 使用Dispatcher.CheckAccess()方法,WInForm中则使用InvokeRequired属性来判断;

5.强文件名生成命令:

sn -k 密钥对文件
sn -p 生成公钥文件
sn -tp 查看公钥

6.资源本地化
  1)设定Form的localizable属性为true,通过设定其language属性来自动建立其资源文件,在切换语言的时候,设置Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en");同时使用System.ComponentModel.ComponentResourceManager.ApplyResource方法来更新控件的属性;对话框也采用form形式定制;
  2)直接设置资源文件,通过System.Globalization.CultureInfo.CurrentUICulture.Name来决定使用哪一种资源文件,同时使用System.Resources.ResourceManager类来对控件属性进行赋值;

7.多线程同步使用AutoResetEvent或者MannualResetEvent两个类
  .Set方法:等同于参数为true的构造函数,使得ResetEvent类的资源可用,使用WaitOne()方法等待的线程不阻塞;
  .reset方法:等同于参数为false的构造函数,使得WaitOne方法等待的线程阻塞;
   .两者的区别在于AutoResetEvent类在set之后随机被等待(waitone)的任一线程捕获,之后自动设置该类资源不可用,相当于显式调用(Reset);
 MannualResetEvent则在set之后所有等待线程都都被唤醒,脱离阻塞状态;

8.关于反射

AppDomain:应用程序域;一组程序集的逻辑容器;
Assembly:程序集类;
Module:模块类;
Type:

以上都具有从属关系;

1)首先需要引用该程序集
Assembly asm=Assembly.load(程序集);
2)asm.createInstance("命名空间.类名").GetType().InvokeMember(函数名,,,,,);
Load在加载弱命名程序集(如上)的时候需要引用程序集,在加载强命名程序集的时候则不需要引用,强命名包括:程序集名,版本信息,语言文化,公钥标记
,并且会加载程序集中引用的其他的程序集;能在程序集上应用安全和部署策略;
2)
Assembly assembly = Assembly.LoadFrom(@”D:/Test/MyAssembly.dll”);
这个方法从指定的路径来加载程序集,实际上这个方法被调用的时候,CLR会打开这个文件,获取其中的程序集版本,语言文化,公钥标记等信息,把他们传递给 Load方法,接着,Load方法采用上面的策略来查找程序集。如果找到了程序集,会和LoadFrom方法中指定的路径做比较,如果路径相同,该程序集 会被认为是应用程序的一部分,如果路径不同或Load方法没有找到程序集,那该程序集只是被作为一个“数据文件”来加载,不会被认为是应用程序的一部分。 这就是在第1点中提到的Load方法比LoadFrom方法的执行效率高的原因。另外,由于可能把程序集作为“数据文件”来加载,所以使用 LoadFrom从不同路径加载相同程序集的时候会导致重复加载。当然这个方法会加载此程序集引用的其他程序集

3)Assembly.LoadFile()

这个方法是从指定的文件来加载程序集,和上面方法的不同之处是这个方法不会加载此程序集引用的其他程序集!

结论:一般大家应该优先选择Load方法来加载程序集,如果遇到需要使用LoadFrom方法的时候,最好改变设计而用Load方法来代替!

Load和LoadFrom加载的程序集在不同的上下文中。
最好不要使用除Load以外的其他其他的Loadxx方法。
从指定路径加载程序集用下面这个:
Assembly.Load(AssemblyName.GetAssemblyName(Path))

9.dynamic表示操作将在运行时解析的对象
Assembly asm = Assembly.Load("ClassLibrary1");
            ((dynamic)asm.CreateInstance("JayTest.Class1")).SayHell0();
            //对比下面的语句,简洁得多
            //asm.CreateInstance("JayTest.Class1").GetType().InvokeMember("SayHell0", BindingFlags.InvokeMethod, null, asm.CreateInstance("JayTest.Class1"), null);  

       
static void Main(string[] args)

        {

            dynamic d = new ExpandoObject();

            d.Name = "ServiceBoy";

            d.Action = Func(()=>d.Name;);

            Console.WriteLine(d.Action());

        }
一般地,任何一个类——如果需要动态为自身添加属性、方法等的,就必须实现IDynamicObjectProvidor接口或者是DynamicObject虚类(之所以用虚类的原因是“各取所需”的缘故,DynamicObject类都通过虚方法virtual去“实现”了接口中所有的方法,只要继承了这个类,读者可以根据需要“任意”动态覆盖你要的方法)。这里介绍三个最常见的方法
public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)

public override bool TryGetMember(GetMemberBinder binder, out object result)

public override bool TrySetMember(SetMemberBinder binder, object value)

10. Net的4个版本特性
     1.0------委托,其中定义两个常用的Func和Action
     2.0------泛型
     3.0-----Linq
                      比如查询某个目录下文件

                     System.IO.DirectoryInfo dInfo = new System.IO.DirectoryInfo(filePath + "");
                   
                    string[] strStyle={".AVI",".MP3",".WAV",".RMVB",".RM",".WMV"};
                    var films= from f  in dInfo.GetFiles()
                               let post=f.Name.Substring(f.Name.LastIndexOf(".")).ToUpper()
                               orderby f.Name ascending
                               where strStyle.Contains(post)
                               select f;

                    Count = films.Count();


     4.0-----Dynamic动态编程

阅读(624) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~