随笔分类 -  C#

C#相关的知识
 
C#如何获取物理网卡,虚拟网卡,以及无线网卡
摘要:就不废话了,直接上代码/// /// 显示本机各网卡的详细信息 /// public static void ShowNetworkInterfaceMessage() { NetworkInterface... 阅读全文
posted @ 2014-06-12 16:21 人生贵在坚持 阅读(5246) 评论(0) 推荐(0)
.NET3.5项目转.NET2.0项目技巧
摘要:最近有一个项目,一开始开发是用VS2008(.NET3.5)开发的,该项目是一个Windorm客户端软件,由于在大规模的推广过程中,发现在安装.NET3.5Framework的时候浪费了太多时间,而且客户也对需要安装这么大的环境流露出不满情绪,故决定将.NET3.5项目转化为.NET2.0的,这样安装环境能够降低到十分之一,如果安装.NET2.0精简版的话,甚至更低。一开始觉得这事情没有那么困难,于是我信心百倍的将各个子项目全部转化成.NET2.0,操作步骤如下。一:右键点击项目--》“属性”--》“应用程序”选择“目标Framework”,将之改为2.0即可。二:在制作“安装包”的时候,在【 阅读全文
posted @ 2014-03-24 11:13 人生贵在坚持 阅读(559) 评论(0) 推荐(0)
GCHandler的使用
摘要:众所周知,我们在使用c#托管代码时,内存地址和GC回收那不是我们关心的,CLR已经给我们暗箱操作。但是如果我们在c#中调用了一个非托管代码,比如vc的DLL,而且他有个回调函数,需要引用c#中的某个对象并操作,这时候你就得要小心了。要是非托管代码中用到得托管代码那个对象被GC给回收了,这时候就会报内存错误。所以我们就要把那个对象“钉”住(pin),让它的内存地址固定,而不被垃圾回收掉,然后最后我们自己管理,自己释放内存,这时候就需要GCHandle,来看个msdn上的例子: public delegate bool CallBack(int handle, IntPtr param); ... 阅读全文
posted @ 2014-03-23 17:13 人生贵在坚持 阅读(864) 评论(0) 推荐(0)
线程的Abort方法有感
摘要:今天看CSDN上一个很老的帖子,有个人说Thread.Abort()方法调用之后一定会抛出异常,我对这个有点疑问。于是自己做了一个测试demo,来研究Abort抛出异常的时机。废话少说,直接上代码: static void Main(string[] args) { Thread th = new Thread(Worker); th.Start(); Thread.Sleep(1000); try { Console.WriteLine(... 阅读全文
posted @ 2014-03-20 10:30 人生贵在坚持 阅读(1780) 评论(0) 推荐(1)
C# winform程序如何打包64位安装程序
摘要:故事背景:原来在客户电脑上工作的很正常的程序,在客户将其操作系统从32位换为64位之后,出现了不能正常使用的问题。---------------------------解决办法:1:将解决方案中的各个子项目重新编译一下,编译之前,要先打开项目属性,切换到生成选项,将目标平台选为X86,(默认设置是anycpu)。2:将安装部署项目属性中的targetplatform 选为X64。重新生成打包项目经过上述两步,就能在64位系统上部署并正常使用了。希望对大家有所帮助。 阅读全文
posted @ 2013-12-19 15:42 人生贵在坚持 阅读(1849) 评论(0) 推荐(0)
C# winform中的datagridview控件标头加入checkbox,实现全选功能。
摘要:1 /// 2 /// 给DataGridView添加全选 3 /// 4 public class AddCheckBoxToDataGridView 5 { 6 public static System.Windows.Forms.DataGridView dgv; 7 public static void AddFullSelect() 8 { 9 if (dgv.Rows.Count < 1)10 {11 return;1... 阅读全文
posted @ 2013-12-19 11:49 人生贵在坚持 阅读(3644) 评论(0) 推荐(0)
C# WinForm控件之Dock顺序调整
摘要:最近被.net winform中的控件布局搞困惑了,由于控件都是使用Dock方式的,操作起来也是比较方便,如果最大化,窗口大小调整等,都可以随着窗口大小的变化而变化。但问题是,.net winform的dock方式是根据先添加的控件顺序进行优先级Dock排列的,假设我想目前有三个控件A、B、C分别以 Top、Bottom以及Fill方式填充窗口即窗口看起来应该是这样的:---------------------A---------------------C---------------------B----------------------问题来了,现在我想添加D控件在A及C中间怎么办?尝试 阅读全文
posted @ 2013-12-19 11:39 人生贵在坚持 阅读(1978) 评论(1) 推荐(1)
C#实现右下角弹出窗口效果
摘要:/// /// 窗体动画函数 注意:要引用System.Runtime.InteropServices; /// /// 指定产生动画的窗口的句柄 /// 指定动画持续的时间 /// 指定动画类型,可以是一个或多个标志的组合。 /// [DllImport("user32")] private static extern bool AnimateWindow(IntPtr hwnd, int dwTime, int dwFlags); //下面是可用的常量,根据不同的动画效果声明自己需要的 private const ... 阅读全文
posted @ 2013-11-25 14:35 人生贵在坚持 阅读(532) 评论(0) 推荐(0)
解决C#的64位打包程序,在64位机器上运行出现BadImageFormatException异常。
摘要:转载自:http://msdn.microsoft.com/zh-cn/library/system.badimageformatexception%28v=vs.100%29.aspxBadImageFormatException 类当动态链接库 (DLL) 或可执行程序的文件映像无效时引发的异常。解决办法:DLL 或可执行文件作为 64 位程序集加载,但是它包含 32 位特性或资源。 例如,它依靠 COM 互操作或调用 32 位动态链接库中的方法。若要解决此异常,请将项目的“平台目标”属性设置为 x86(而不是 x64 或 AnyCPU)并重新编译。 阅读全文
posted @ 2013-11-21 13:22 人生贵在坚持 阅读(739) 评论(0) 推荐(0)
小知识备注
摘要:CLR的执行模型:http://www.cnblogs.com/joey0210/p/3429548.html#p_4IRichEditOle:http://www.debugease.com/csharp/2879986.html 阅读全文
posted @ 2013-11-19 17:50 人生贵在坚持 阅读(161) 评论(0) 推荐(0)
C# 使用命令行编译单个CS文件
摘要:编译单个CS文件。1.编译 File.cs 以产生 File.exe: csc File.cs 2.编译 File.cs 以产生 File.dll: csc /target:library File.cs 3.编译 File.cs 并创建 My.exe: csc /out:My.exe File.cs 4.通过使用优化和定义 DEBUG 符号,编译当前目录中所有的 C# 文件。输出为 File2.exe: csc /define:DEBUG /optimize /out:File2.exe *.cs 5.编译当前目录中所有的 C# 文件,以产生 File2.dll 的调试版本。不显示任何徽标和 阅读全文
posted @ 2013-11-06 17:47 人生贵在坚持 阅读(1524) 评论(0) 推荐(0)
一个有趣的IE内核检测网站
摘要:http://se.360.cn/v5/iecoretest.html该网站能有效检测您浏览器的内核,以及版本,操作系统。找到这个网址,是因为最近解决WebBrowser自动调节IE版本功能时发现的。效果图如下 阅读全文
posted @ 2013-11-06 15:37 人生贵在坚持 阅读(583) 评论(0) 推荐(0)
C#注册表常用操作
摘要:1:加键 改值 Microsoft.Win32.RegistryKey Key = Microsoft.Win32.Registry.CurrentUser.CreateSubKey( @"Software\Microsoft\Internet Explorer\Main"); Key.SetValue( "Window Title" , value ); Key.Close(); 2:获取键值 Microsoft.Win32.RegistryKey Key = Microsoft.W... 阅读全文
posted @ 2013-11-06 15:29 人生贵在坚持 阅读(151) 评论(0) 推荐(0)
C#线程状态简析
摘要:在C# 语言世界中,当我们创建一个新的子线程,该线程状态为unstarted,子线程开始之后,子线程状态为Running,IsAlive 为true;线程响应 Thread.Start 并开始运行。 Running 线程调用 Thread.Sleep。 WaitSleepJoin 线程对另一个对象调用 Monitor.Wait。 WaitSleepJoin 线程对另一个线程调用 Thread.Join。 WaitSleepJoin 另一个线程调用 Thread.Suspend。 SuspendRequested 线程响应 Thread.Suspend 请求。 Suspended 另一个线程调用 阅读全文
posted @ 2013-10-30 17:06 人生贵在坚持 阅读(1253) 评论(0) 推荐(0)
dllimport路径问题
摘要:今天做了个试验,是针对dllimport("XXX.DLL");这样写的时候,系统是如何寻找该dll的。首先系统会搜寻主应用程序根目录。其次搜寻操作系统安装目录,一般情况是C:\\WINDOWS\\SYSTEM32\\路径。再者是程序代码中,Directory.SetCurrentDirectory("路径")用该语句指定的应用程序工作目录中去找最后,程序会去环境变量中搜寻该DLL。 阅读全文
posted @ 2013-10-24 18:11 人生贵在坚持 阅读(412) 评论(0) 推荐(0)
关于dllimport的使用
摘要:最近做一个动态加载插件的项目,插件中的dll 主要是各厂商各型号的读卡器的通用类库,stdapi.dll,WltRS.dll,有的还有进一步封装的dll,主要是为了简化通用类库的操作。这些类库都是用C语言,或者C++来编写的,我的项目是用C#语言编写,通过Dllimport来调用这些非托管dll的方法。在做这个项目的时候,由于之前的读卡器类库都是通用的,所以即时使用两款或者更多款读卡器设备,加载的都是同一类dll,不会出现问题。但是在开发与通用类库不兼容的插件的时候(都是读卡器插件),问题出现了。一:输入用户名,密码,登陆系统。1:该用户能使用的设备如果都是调用通用类库的读卡器,那么使用起来没 阅读全文
posted @ 2013-10-15 15:04 人生贵在坚持 阅读(3888) 评论(0) 推荐(0)
装箱与拆箱
摘要:装箱:将值类型转换为引用类型拆箱:将引用类型转换为值类型。----------------------------------例子:int val=10;object o=val;//装箱,这是一个装箱的过程,是将值类型转换为引用类型的过程int val1=(int)o;//拆箱,这是一个拆箱的过程,是将值类型转换为引用类型,再由引用类型转换为值类型的过程------------------------------------.NET中,数据类型划分为值类型和引用(不等同于C++的指针)类型,与此对应,内存分配被分成了两种方式,一为栈,二为堆,注意:是托管堆。值类型只会在栈中分配。引用类型分配 阅读全文
posted @ 2013-10-10 20:31 人生贵在坚持 阅读(229) 评论(0) 推荐(0)
类的实例化知多少
摘要:其实,作为C#程序员,我们看到这样的题目,也许没什么感觉,因为我们每天都在对C#对象实例化,但是,我们真的知道实例化的过程吗?也许,我们总是习惯于写这样的语句 A a=new A();,可是,我们真的知道这样一句话到底是怎么样执行的吗?我想,大多数程序员并不清楚。那么今天,我们通过一个例子来探究一下类的实例化过程。 public class ConsoleTest { public ConsoleTest(string content) { Console.WriteLine(content); } } publ... 阅读全文
posted @ 2013-10-06 17:18 人生贵在坚持 阅读(327) 评论(0) 推荐(0)