随笔分类 - C#
摘要:1.vshost32.exe 已停止工作 的解决办法来自 http://www.cnblogs.com/sunyjie/archive/2012/11/17/2775341.html2. 句柄handle来自http://www.cnblogs.com/barcelong/articles/1261...
阅读全文
摘要:转自:http://blog.csdn.net/jinjazz/archive/2009/02/03/3861143.aspx本文只是一个测试例子,核心代码是kernel32.dll中的一组windows api函数,这里不深入研究,代码都在codeproject上。http://www.codeproject.com/KB/threads/dotnetnamedpipespart1.aspx测试效果如下,可以做到aspx和给console app发送消息后得到反馈:console app为服务器端代码如下usingSystem;usingAppModule.InterProcessComm;
阅读全文
摘要:之前写过一篇博客:用 Fiddler来调试HTTP,HTTPS。 这篇文章介绍另一个好用的抓包工具wireshark,用来获取网络数据封包,包括http,TCP,UDP,等网络协议包。记得大学的时候就学习过TCP的三次握手协议,那时候只是知道,虽然在书上看过很多TCP和UDP的资料,但是从来没有真正见过这些数据包, 老是感觉在云上飘一样,学得不踏实。有了wireshark就能截获这些网络数据包,可以清晰的看到数据包中的每一个字段。更能加深我们对网络协议的理解。对我而言, wireshark 是学习网络协议最好的工具。阅读目录wireshark介绍wireshark不能做的wireshark V
阅读全文
摘要:Log4Net应该可以说是DotNet中最流行的开源日志组件了。以前需要苦逼写的日志类,在Log4Net中简单地配置一下就搞定了。没用过Log4Net,真心不知道原来日志组件也可以做得这么灵活,当然这系列的教程讲的是Log4Net的应用。学习完这系列的教程,你可以实现如下图一样整洁、醒目的日志文件。教程中的每一篇文章都有可以运行的例子,并且教程里面的例子基本上都是典型的应用,你可以直接拿来用。我整理了一个Log4Net的配置文件Log4Net.config和一个日志帮助类LogHelper,你可以直接拷到你的项目中,然后就可以直接用了,什么都不用自己写。 关于教程的介绍第一、第二篇教程主要是给
阅读全文
摘要:原文叫看《墨攻》理解IOC概念2006年多部贺岁大片以让人应接不暇的频率纷至沓来,其中张之亮的《墨攻》算是比较出彩的一部,讲述了战国时期墨家人革离帮助梁国反抗赵国侵略的个人英雄主义故事,恢宏壮阔,浑雄凝重的历史场面相当震撼。其中有一个场景:当刘德华所饰的墨者革离到达梁国都城下,城上梁国守军问:“来者何人?”,刘德华回答:“墨者革离!”,我们不妨用C#(原文是java,我修改)对这段“城门问对”的场景进行编剧并借由这个例子来理解IoC的内涵。剧本和饰演者耦合MoAttack代表《墨攻》的剧本,cityGetAsk()代表“城门问对”这段剧情,LiuDeHua是具体饰演者刘德华:代码清单1publ
阅读全文
摘要:LINQ是.NET Framework 3.5的新特性,其全称是 Language Integrated Query,即语言集成查询,是指将查询功能和语言结合起来。从而为我们提供一种统一的方式,让我们能在C#或VB.NET语言中直接查询和操作各种数据。本系列文章力图对LINQ进行一个完整和详细的介绍,希望能对广大园友有些许帮助。也期待能和大家一起讨论和学习,共同进步!第一部分:从这里开始学习LINQ本部分包含三篇博客,讨论了LINQ的作用以及C#3.0为LINQ提供的语言特性:隐式类型局部变量、自动属性、匿名类型、扩展方法、Lambda表达式、对象初始化器。LINQ之路1:LINQ介绍LINQ
阅读全文
摘要:1. 委托Delegate C#中的Delegate对应于C中的指针,但是又有所不同C中的指针既可以指向方法,又可以指向变量,并且可以进行类型转换,C中的指针实际上就是内存地址变量,他是可以直接操作内存的,通过内存地址直接访问变量,直接调用方法。 而C#中的Delegate是强类型的,也就是说在声明委托时就已经指定了该变量只能指向具有特定参数,以及返回值的方法。 使用delegate就可以直接建立任何名称的委托类型,当进行系统编译时,系统就会自动生成此类型。您可以使用delegate void MyDelegate()方式建立一个委托类,并使用ILDASM.exe观察其成员。由ILDASM.e
阅读全文
摘要:在我们了解Task之前,如果我们要使用多核的功能可能就会自己来开线程,然而这种线程模型在.net 4.0之后被一种称为基于“任务的编程模型”所冲击,因为task会比thread具有更小的性能开销,不过大家肯定会有疑惑,任务和线程到底有什么区别?1:任务是架构在线程之上的,也就是说任务最终还是要抛给线程去执行。2:任务跟线程不是一对一的关系,比如开10个任务并不是说会开10个线程,这一点任务有点类似线程池,但是任务相比线程池有很小 的开销和精确的控制。一:Task1. 最简单的使用 开启task有两种方式: 实例化Task1 //第一种方式开启2 var task1 =...
阅读全文
摘要:Windows钩子Windows应用程序的运行模式是基于消息驱动的,任何线程只要注册了窗口类就会有一个消息队列来接收用户的输入消息和系统消息。为了取得特定线程接收或发送的消息,就要Windows提供的钩子。钩子的概念钩子(Hook)是Windows消息处理机制中的一个监视点,应用程序可以在这里安装一个子程序(钩子函数)以监视指定窗口某种类型的消息,所监视的窗口可以是其他进程创建的。当消息到达后,在目标窗口处理函数处理之前,钩子机制允许应用程序截获它进行处理。钩子函数是一个处理消息的程序段,通过调用相关的API函数,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就捕获该消息,亦
阅读全文
摘要:DateTime.ToString()函数有四个重载。一般用得多的就是不带参数的那个了。殊不知,DateTime.ToString(string format)功能更强大,能输出不同格式的日期。以下把一些情况罗列出来,供大家参考。有些在MSDN上有的就没有列出来了。1. y代表年份,注意是小写的y,大写的Y并不代表年份。2. M表示月份。3. d表示日期,注意D并不代表什么。4. h或H表示小时,h用的是12小时制,H用的是24小时制。5. m表示分钟。6. s表示秒。注意S并不代表什么。格式输出示例年y7string yy = DateTime.Now.ToString("y-MM
阅读全文
摘要:/// /// 计算本周起始日期(礼拜一的日期) /// /// 该周中任意一天 /// 返回礼拜一日期,后面的具体时、分、秒和传入值相等 public static DateTime CalculateFirstDateOfWeek(DateTime someDate) { int i = someDate.DayOfWeek - DayOfWeek.Monday; if (i == -1) i = 6;// i值 > = 0 ,因为枚举原因,Sunday排在最前,此时Sunday-Monday=-1,必须+7=6。 TimeSpan ts = new TimeS...
阅读全文
摘要:虽然.NET框架号称永远不会发生内存泄漏,原因是引入了内存回收机制。但在实际应用中,往往我们分配了对象但没有释放指向该对象的引用,导致对象永远无法释放。最常见的情况就是给对象添加了事件处理函数,但当不再使用该对象时却没有将该函数从对象的事件handler中减掉。另外如果分配了非托管内存,而没有手工释放,GC同样无能为力。所以当.NET应用发生内存泄漏后如何跟踪应用的内存使用情况,定位到程序设计中的缺陷显得非常重要。下面想大家推荐5款非常实用的性能分析、内存优化工具。觉得让你收获满满!1.JetBrains dotTraceJetBrains dotTrace是一款性能和内存分析工具,它可以帮助
阅读全文
摘要:本文将主要通过“同步调用”、“异步调用”、“异步回调”三个示例来讲解在用委托执行同一个“加法类”的时候的的区别和利弊。首先,通过代码定义一个委托和下面三个示例将要调用的方法:Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->/*添加的命名空间usingSystem.Threading;usingSystem.Runtime.Remoting.Messaging;*/ publicdelegateintAddHandler(inta,intb);
阅读全文
摘要:一提到委托,浮现在我们脑海中的大概是听的最多的就是类似C++的函数指针吧,呵呵,至少我的第一个反应是这样的。关于委托的定义和使用,已经有诸多的人讲解过,并且讲解细致入微,尤其是张子阳的那一篇。我就不用多废话了。今天我要说的是C#中的三种委托方式:Func委托,Action委托,Predicate委托以及这三种委托的常见使用场景。Func,Action,Predicate全面解析首先来说明Func委托,通过MSDN我们可以了解到,Func委托有如下的5种类型: (1) *delegate TResult Func(); (2)*delegate TR...
阅读全文
摘要:许多应用程序使用多个线程,但这些线程经常在休眠状态中耗费大量的时间来等待事件发生。其他线程可能进入休眠状态,并且仅定期被唤醒以轮询更改或更新状态信息,然后再次进入休眠状态。为了简化对这些线程的管理,.NET框架为每一个进程提供了一个线程池,使应用程序能够根据需要来有效地利用多个线程。一个线程监视排到线程池的若干个等待操作的状态。当一个等待操作完成时,线程池中的一个辅助线程就会执行对应的回调函数。线程池中的线程由系统进行管理,程序员不需要费力于线程管理,可以集中精力处理应用程序任务。 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线.
阅读全文
摘要:源码下载:http://www.tracefact.net/SourceCode/MoreDelegate.rarC#中的委托和事件(续)引言如果你看过了 C#中的委托和事件 一文,我想你对委托和事件已经有了一个基本的认识。但那些远不是委托和事件的全部内容,还有很多的地方没有涉及。本文将讨论委托和事件一些更为细节的问题,包括一些大家常问到的问题,以及事件访问器、异常处理、超时处理和异步方法调用等内容。为什么要使用事件而不是委托变量?在 C#中的委托和事件 中,我提出了两个为什么在类型中使用事件向外部提供方法注册,而不是直接使用委托变量的原因。主要是从封装性和易用性上去考虑,但是还漏掉了一点,事
阅读全文
摘要:大家在实际工作学习C#的时候,可能会问:为什么我们要为一些已经存在的功能(比如Windows中的一些功能,C++中已经编写好的一些方法)要重新编写代码,C#有没有方法可以直接都用这些原本已经存在的功能呢?答案是肯定的,大家可以通过C#中的DllImport直接调用这些功能。 DllImport所在的名字空间 using System.Runtime.InteropServices; MSDN中对DllImportAttribute的解释是这样的:可将该属性应用于方法。DllImportAttribute 属性提供对从非托管 DLL 导出的函数进行调用所必需的信息。作为最低要求,必须提供包含入口
阅读全文
摘要:引言委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里别(biè)得慌,混身不自在。本文中,我将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.Net Framework中的委托和事件、委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论。将方法作为方法的参数我们先不管这个标题如何的绕口,也不管委托究竟是个什么东西,来看下面这两个最简单的方法,它们不过是在屏幕上输出一句问
阅读全文
摘要:表达式在右边的 Lambda 表达式称为“Lambda 表达式”。Lambda 表达式在构造表达式树(C# 和 Visual Basic)时广泛使用。Lambda 表达式返回表达式的结果,并采用以下基本形式:(input parameters) => expression只有在 Lambda 有一个输入参数时,括号才是可选的;否则括号是必需的。两个或更多输入参数由括在括号中的逗号分隔:C#(x, y) => x == y有时,编译器难于或无法推断输入类型。如果出现这种情况,您可以按以下示例中所示方式显式指定类型:C#(int x, string s) => s.Length
阅读全文
摘要:附件表结构如下:上传附件: /// <summary> /// 上传附件 /// </summary> /// <param name="filePath">上传文件路径</param> /// <param name="strAttachmentId">返回附件ID</param> /// <returns>true :上传成功 ; false :上传失败</returns>private bool UploadAttachment(string fileP
阅读全文