.net显示网络连接状态图标

效果图: 介绍  越来越多的软件要通过连接互联网来执行一些业务层的业务操作,比如调用web services服务,获取数据等等。 通常你可能希望知道当前你的网络连接是不是真的连上了,当然有很多种方法可以做到,比如,你可以查看System.Net 命名空间中的NetworkInterface 的状态,但是有这以太网连接并不表示你的连接真的可以用。 本文将会展示一种方法,该方法在程序的状态栏StatusStrip 显示一个简单的图标来指示是不是真的连接到了互联网。 使用代码  最简单的我们会想到使用一个Timer来进行http-get请求来判断一个特定的网页是否可用。  当然这种方法下,我们最应该考虑的就是请求不能阻塞UI线程,因此,我将使用一个BackgroundWorker 对象来进行get请求,BackgroundWorker 对象声明了DoWork方法。该方法定义了一个事件句柄,该句柄传递一个DoWorkEventArgs 类来将事件的处理结果返回到UI线程,因此,你不必与任何的UI元素进行交互,因为它运行在一个独立的线程里。  这个查询很简单,我执行简单的HttpWebRequest 来请求一个必然是可用的网页。比如微软的主页或是Google的主页。通过这样,我们就能知道是不是真的连接上了互联网。  当BackgroundWorker 对象完成了他的工作,,也就是定义DoWork 里的事件,他会触发RunWorkerCompleted 事件,这个事件也定义了一个定制的事件句柄- RunWorkerCompletedEventArgs 有了这个类,我们就可以管理ToolStripStatusLabel的显示了 结论  .net 是的使用后台线程很容易,也是的我们的UI有了更加平滑,有好的体验,现在,VS2005强烈建议手工为DoWork指定你的代理 ,因为VS.net有一个bug,当你尝试着重写而不是在另一个独立的线程里使用UI代码,VS可能会替换你写的代码。。 如果你需要使用Web Service,也许你可以考虑添加一个GetVersion的方法到你的Web Service里。然后尝试去访问这个服务。来确定你的web服务器是不是正常可用。 历史  Demo version - 1.0.0.0 –随文附 许可本文没有显式的许可,但是可能包含了一些使用上的条款,不论是在文章里还是在下载的代码里。如果有疑问联系我吧。。 原文地址:Display an Internet Connection status icon using .NET Framework 2.0 著作权声明:本文由http://leaver.me 翻译,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢! 源代码下载:InternetConnectionStatus

一个可定制的WPF任务对话框

今天实在看WPF揭秘的时候看到TaskDialog这个控件的。然后就去找了一下开源的代码。在codeproject上发现了这个,非常给力。。另外codeproject改版后很漂亮哦。 介绍: 这是用WPF实现Vista上TaskDialog效果的代码。 Messagbox消息框 通过调用重写的静态Show方法。TaskDialog就会表现的像一个Messagebox。他有四个文本类型的属性:Header(头部), Content(内容), Detail(更多), 和 Footer(底部),其实Detail是一个折叠的区域, 而Header和Footer还有一个icon属性(HeaderIcon和FooterIcon),除此之外,Header还有Background(背景)和Foreground(前景)属性 TaskDialog控件派生自HeaderedContentControl类,因为从HeaderedContentControl类可以获得Header和Content属性,TaskDialog仅仅是添加了Detail和Footer属性,这些属性是Object类型,并且有他们自己的template(模板)属性HeaderTemplate, ContentTemplate, DetailTemplate, 和 FooterTemplate),TaskDialog类对于文本内容有着缺省的数据模板,当然你也可以用那四个模板来替换,这样你就可以以你喜欢的任何方式来格式化文本了。下面这个图展示了通过斜体和下划线来格式化文本。 图2 因为Header,Content,Detail和Footer是object类型,因此不再受到只能是文本的限制了,你可以防止你喜欢的任何类型到TaskDialog,下面这个例子中的TaskDialog是不是很像UAC的提示呢。这里Content属性是一个UserControl类型,放置了一个图片和一些文本还有两个CommandButtons(都是普通的按钮。。不过添加了一些定制的样式,再加了Header属性) 图三 一个模拟vista的文件拷贝窗口的TaskDialog。。 图四 额外的一些有意思的属性 下面是TaskDialog暴露的属性列表(按字母表排序) Button1Text: string类型,当TaskDialogButton属性被设置为Custom的时候,用来设置按钮的文字 Button2Text: 同上 Button3Text: 同上 DefaultResult: TaskDialogResult类型. 设置缺省的按钮 IsButton1Enabled: bool类型. 获取或设置按钮的Enabled状态 IsButton2Enabled: 同上 IsButton3Enabled: 同上 IsCloseButtonEnabled: bool类型. 获取或设置窗口关闭按钮的Enabled状态 (缺省为false) IsExpanded: bool类型,获取或是设置Detail部分的可见性。 IsModal: bool类型,获取或是设置对话框是不是模态的 ShowInTaskBar: bool类型,获取或是设置对话框是不是显示在任务栏中 SystemSound: TaskDialogSound类型. 设置当对话框显示的时候播放的声音 TaskDialogButton: TaskDialogButton类型. 显示在对话框上的按钮可以是None, Ok, OkCancel, YesNo, YesNoCancel, or Custom (查看上面提到的按钮设置) title: string类型,对话框的标题 ToggleButtonTexts: TaskDialogToggleButtonTexts提供了两个属性来设置toggle按钮的这个属性,当toggle 按钮折叠或是展开的时候 (缺省是'Show Details’ 和'Hide Details’). TopMost: 设置对话框是否置顶 Demo 下载TaskDialog例子,查看Window1.xaml中按钮的单击事件,来看TaskDialog是如何被创建的。。 版权:本文,包括源代码和文件,在CPOL下授权。 原文地址:A-Customizable-WPF-TaskDialog 著作权声明:本文由http://leaver.me 翻译,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢!

汇编-32位CPU所含有的寄存器

今年的课程有汇编。真为校领导的智商捉鸡。。不过还是要学的。分享一篇来自中文FLEX例子的汇编寄存器的文章。很不错的一篇寄存器详解的文章。文章最后是我找到的一个汇编指令助手。  4个数据寄存器(EAX、EBX、ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES、CS、SS、DS、FS和GS) 1个指令指针寄存器(EIP) 1个标志寄存器(EFlags) 1、数据寄存器  数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。对低16位数据的存取,不会影响高16位的数据。这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。  4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。程序员可利用数据寄存器的这种”可分可合”的特性,灵活地处理字/字节的信息。  寄存器AX和AL通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。累加器可用于乘、 除、输入/输出等操作,它们的使用频率很高; 寄存器BX称为基地址寄存器(Base Register)。它可作为存储器指针来使用; 寄存器CX称为计数寄存器(Count Register)。在循环和字符串操作时,要用它来控制循环次数;在位操作 中,当移多位时,要用CL来指明移位的位数;  寄存器DX称为数据寄存器(Data Register)。在进行乘、除运算时,它可作为默认的操作数参与运算,也 可用于存放I/O的端口地址。在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,但在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果,而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。 2、变址寄存器  32位CPU有2个32位通用寄存器ESI和EDI。其低16位对应先前CPU中的SI和DI,对低16位数据的存取,不影响高16位的数据。  寄存器ESI、EDI、SI和DI称为变址寄存器(Index Register),它们主要用于存放存储单元在段内的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。变址寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。它们可作一般的存储器指针使用。在字符串操作指令的执行过程中,对它们有特定的要求,而且还具有特殊的功能。 3、指针寄存器  32位CPU有2个32位通用寄存器EBP和ESP。其低16位对应先前CPU中的SBP和SP,对低16位数据的存取,不影响高16位的数据。  寄存器EBP、ESP、BP和SP称为指针寄存器(Pointer Register),主要用于存放堆栈内存储单元的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。指针寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。  它们主要用于访问堆栈内的存储单元,并且规定:  BP为基指针(Base Pointer)寄存器,用它可直接存取堆栈中的数据;  SP为堆栈指针(Stack Pointer)寄存器,用它只可访问栈顶。 4、段寄存器  段寄存器是根据内存分段的管理模式而设置的。内存单元的物理地址由段寄存器的值和一个偏移量组合而成  的,这样可用两个较少位数的值组合成一个可访问较大物理空间的内存地址。  CPU内部的段寄存器:  CS——代码段寄存器(Code Segment Register),其值为代码段的段值; DS——数据段寄存器(Data Segment Register),其值为数据段的段值; ES——附加段寄存器(Extra Segment Register),其值为附加数据段的段值; SS——堆栈段寄存器(Stack Segment Register),其值为堆栈段的段值; FS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值; GS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值。  在16位CPU系统中,它只有4个段寄存器,所以,程序在任何时刻至多有4个正在使用的段可直接访问;在32位微机系统中,它有6个段寄存器,所以,在此环境下开发的程序最多可同时访问6个段。32位CPU有两个不同的工作方式:实方式和保护方式。在每种方式下,段寄存器的作用是不同的。有关规定简单描述如下:  实方式: 前4个段寄存器CS、DS、ES和SS与先前CPU中的所对应的段寄存器的含义完全一致,内存单元的逻辑地址仍为”段值:偏移量”的形式。为访问某内存段内的数据,必须使用该段寄存器和存储单元的偏移量。  保护方式: 在此方式下,情况要复杂得多,装入段寄存器的不再是段值,而是称为”选择子”(Selector)的某个值。 5、指令指针寄存器  32位CPU把指令指针扩展到32位,并记作EIP,EIP的低16位与先前CPU中的IP作用相同。  指令指针EIP、IP(Instruction Pointer)是存放下次将要执行的指令在代码段的偏移量。在具有预取指令功能的系统中,下次要执行的指令通常已被预取到指令队列中,除非发生转移情况。所以,在理解它们的功能时,不考虑存在指令队列的情况。  在实方式下,由于每个段的最大范围为64K,所以,EIP中的高16位肯定都为0,此时,相当于只用其低16位的IP来反映程序中指令的执行次序。 6、标志寄存器  一、运算结果标志位  1、进位标志CF(Carry Flag)  进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。使用该标志位的情况有:多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位,专门改变CF值的指令等。  2、奇偶标志PF(Parity Flag)  奇偶标志PF用于反映运算结果中”1″的个数的奇偶性。如果”1″的个数为偶数,则PF的值为1,否则其值为0。  利用PF可进行奇偶校验检查,或产生奇偶校验位。在数据传送过程中,为了提供传送的可靠性,如果采用奇偶校验的方法,就可使用该标志位。  3、辅助进位标志AF(Auxiliary Carry Flag)  在发生下列情况时,辅助进位标志AF的值被置为1,否则其值为0:  (1)、在字操作时,发生低字节向高字节进位或借位时; (2)、在字节操作时,发生低4位向高4位进位或借位时。  对以上6个运算结果标志位,在一般编程情况下,标志位CF、ZF、SF和OF的使用频率较高,而标志位PF和AF的使用频率较低。  4、零标志ZF(Zero Flag)  零标志ZF用来反映运算结果是否为0。如果运算结果为0,则其值为1,否则其值为0。在判断运算结果是否为0时,可使用此标志位。  5、符号标志SF(Sign Flag)  符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。在微机系统中,有符号数采用补码表示法,所以,SF也就反映运算结果的正负号。运算结果为正数时,SF的值为0,否则其值为1。  6、溢出标志OF(Overflow Flag)  溢出标志OF用于反映有符号数加减运算所得结果是否溢出。如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则,OF的值被清为0。”溢出”和”进位”是两个不同含义的概念,不要混淆。如果不太清楚的话,请查阅《计算机组成原理》课程中的有关章节。  二、状态控制标志位  状态控制标志位是用来控制CPU操作的,它们要通过专门的指令才能使之发生改变。  1、追踪标志TF(Trap Flag)  当追踪标志TF被置为1时,CPU进入单步执行方式,即每执行一条指令,产生一个单步中断请求。这种方式主要用于程序的调试。指令系统中没有专门的指令来改变标志位TF的值,但程序员可用其它办法来改变其值。  2、中断允许标志IF(Interrupt-enable Flag)

Html解析工具-HtmlAgilityPack

这个工具是在暑假的时候发现的。但是最后没用这个工具。不过,这个工具可是非常强悍的。。 HtmlAgilityPack主要就是解析DOM的。常用的基础类其实不多,对解析DOM来说,就只有HtmlDocument和HtmlNode这两个常用的类,还有一个 HtmlNodeCollection集合类。我给出一个抓取我博客首页文章的例子。看代码可能更清楚一点。你可以去看看压缩包里提供的文档。 xpath如果自己写表达式比较麻烦。所以我还找到了这个HtmlAgilityPack提供了的一个xpath辅助工具-HAPExplorer。都给出了地址。 首先看我的例子,抓取我博客的首页文章: 程序运行结果: xpath表达式的具体书写都是需要分析你需要解析的网站源码的。。。。 xpath辅助工具的界面: 下载:HtmlAgilityPack 下载:HAPExplorer

《商务智能与数据挖掘-谢邦昌》第三章读书笔记

3.数据挖掘 3.1定义  数据挖掘是指找寻隐藏在数据中的信息,如趋势。特征及相关性的过程。也就是从数据中发掘信息或知识(Knowledge Discovery in Database)。也有人称之为数据考古学。。记住,它不是一个无所不能的软件或是一种技术,他是一种结合数种专业技术的应用。数据挖掘工具从数据中发掘出个各种假设。但是并不帮你查证。确认这些假设。也不帮你判断这些假设是否有价值。 3.2数据挖掘的功能  1.分类(Classification),按照分析对象的属性进行分门别类加以定义。建立类组(Class)。例如划分银行信用申请者的风险属性,使用的技术有决策树(Decision Tree),记忆基础推理(memory-based reasoning)  2.估计(Estimation),根据既有连续性数值的相关属性数据。以获知某一属性未知值。。例如按照信用申请者的教育程度,行为估计其的信用卡缴费量。使用的技术包括相关分析,回归分析及神经网络算法。  3.预测(Prediction)根据对象属性的过去观察值来估计该属性未来值。比如根据顾客过去刷卡消费量来预测其未来刷卡消费量。使用的技术包括回归分析,时间序列分析,神经网络。  4.关联分组(Affinity Grouping)从所有对象决定哪些相关对象放在一起销售。比如那个啤酒和尿不湿。。在客户营销系统上,此功能用来确定交叉销售。。  5.聚类(Clustering),将异质总体中区分为特征相近的同质类组。目的是将组和组之间的差异辨识出来。并对个别组内相似样本进行挑选。 3.3数据挖掘的步骤  1.理解数据和数据所代表的含义(Data Understanding)  2.获取相关知识和技术(Domain Knowledge Acquisition)  3.整合和检查数据(Integration and Checking)  4.去除错误或不一致的数据(Data Cleaning)  5.建模与假设(Model and Hypothesis Development)  6.数据挖掘运行(Running)  7.测试与验证所挖掘的数据(Testing and Verification)  8.解释与使用数据(Interpretation and Use) 3.4数据挖掘建模的标准CRISP-DM  CRISP-DM模型强调完整的数据挖掘过程,不能只针对数据整理、数据呈现、数据分析以及构建模型,还需要对企业的需求问题进行了解,同时,后期对模型进行评价和模型的延伸应用,也是一个完整的数据挖掘过程不可或缺的要素。  CRISP-DM分为六个阶段(phase)和四个层次(level),分别简介如下:  1. 商业理解(Business Understanding)  本阶段主要的工作是要针对企业问题以及企业需求进行了解确认,针对不同的需求做深入的了解,将其转换成数据挖掘的问题,并拟定初步构想。在此阶段中,需要与企业进行讨论,以确定分析者可以对于问题有非常清楚的了解,只有这样才可以正确地针对问题拟定分析过程。  2. 数据理解(Data Understanding)  这部分包含建立数据库与分析数据。在此阶段必须收集初步数据,然后了解数据的内涵与特性,选择要进行数据挖掘所必须的数据,然后进行数据整理及评估数据的质量,必要时再将分属不同数据库的数据加以合并及整合。数据库建立完成后再进行数据分析,找出影响预测最大的数据。  3. 数据预处理(Data Preparation)  此步骤和第二步数据理解是数据处理的核心,这是建立模型之前的最后一步数据准备工作。数据预处理任务很可能要执行多次,并且没有任何规定的顺序。  4. 建立模型(Modeling)  针对已预处理过的数据加以分析,配合各种技术方法加以应用,针对既有数据建构出模型,替企业解决问题;面对同一种问题,会有多种可以使用的分析技术,但是每一种分析技术却对数据有些限制及要求,因此需要回到数据前置处理的阶段,来重新转换需要的变量数据加以分析。  5. 评价和解释(Evaluation)  从数据分析的观点看,在开始进入这个阶段时已经建立了看似是高质量的模型,但在实际应用中,随着应用数据的不同,模型的准确率肯定会变化。这里,一个关键的目的是确定是否有某些重要的商业问题还没有充分地考虑。在这个阶段的结尾,应该获得对数据挖掘结果的判定。  6. 实施(Deployment)  一般而言,创建模型完成并不意味着项目结束。模型建立并经验证之后,可以有两种主要的使用方法。一种是提供给决策人员做参考,由他察看和分析这个模型之后提出行动方案建议;另一种是把此模型应用到不同的数据集上。此外,在应用了模型之后,当然还要不断监控它的效果。  四个层次分别为阶段(phase)、一般任务(generic task)、专项任务(specialized task)、流程实例(process instance)。每个阶段由若干一般任务组成,每个一般任务又实施若干专项任务,每个专项任务由若干流程实例来完成。其中,上两层独立于具体数据挖掘方法,即是一般数据挖掘项目均需实施的步骤(What to do?),这两层的任务将结合具体数据挖掘项目的“上下文”(context)映像到下两层的具体任务和过程。所谓项目的“上下文”是指项目开发中密切相关、需要综合考虑的一些关键问题,如应用领域、数据挖掘问题类型、技术难点、工具及其提供的技术等。

《商务智能与数据挖掘-谢邦昌》第二章读书笔记

2.数据仓库  数据仓库名字上来看是很好理解的。他与传统的数据库的不同在于。传统的数据库是未经整理后的一大堆数据集。而数据仓库是从数据库中萃取出来。经过整理,规划,建构而成的一个有系统的数据库的子集合。 2.1数据仓库特点:  数据仓库的四个特点。  1.面向主题(Subject Orient)。数据建立的着重点就是在于以重要的主题组件作为核心。作为建构的方向。数据需求者只要把谣言觉得相关主题数据,从数据库中攫取,整合之后就可以做研究之用。  2.整合性(Integrated)各应用系统的数据需经过整合。以便利执行相关分析操作  3.长期性(Time Variance) 为了执行趋势的分析。数据仓库系统需保留1-10年的历史数据。这与数据库为日常性的数据有所不同。  4.稳定性(Non-Volatile)数据库可以被随时修改,但数据仓库基本上不会大动。只有内部人员会定期修改。但频率不会太多。也不允许用户做更新的动作。  由于以上的几个特点。数据仓库必须通过一连串的程序才可建立。而不是说即买即用。。 2.2数据仓库架构  数据源->整体数据仓库->部门性数据仓库->查询工具->终端用户  数据仓库的建设过程:  专业顾问通过与企业进行需求访谈,建立数据仓库的model,然后将企业内各种数据整合到数据库中,并建立前端分析数据的工具以及管理工具,这样的过程即为建立数据仓库的基本过程。  1.设计(Design) 即数据仓库的数据Model设计,这部分是最重要的,若Model设计的不够周全或布里希那个,不管之后的报表设计如何精美,也可能跑出错误的信息。这也是需要有经验的专业顾问建立数据仓库的一个重要原因。  2.整合(Integrate)即数据的整合转换过程,包含数据解释(Data Extraction) ,数据转换(Data Transformation)数据清理(Data Cleaning),数据加载(Data Loading)将各种来源的数据整理,转换并加载数据仓库中,程序编写较为繁杂,自动化处理困难,经常需要人工参与操作,大约占掉该项目60-70%的时间和人力。  3.可视化(Visualize)即前端呈现给用户看的形式,例如数据挖掘(Data Mining) 即OLAP工具,用以呈现分析过的数据形式。  4.调度(Administration)为管理的工具。 2.3建立数据仓库的原因和目的  提高企业的竞争能力,降低成本,提高客户满意度。创造利润。

《商务智能与数据挖掘-谢邦昌》第一章读书笔记

1.绪论  商务智能的含义就是指通过企业所拥有的数据和数据仓库的汇总,结合联机分析及数据挖掘技术挖掘出潜藏在数据库中的有用信息,并将其提供给决策者或部门主管作为平时运营的决策依据。而当企业面临危机时或必须立即做出重大决策时,也能依据数据仓库所提供的正确数据及时作出正确的决策。协助企业顺利解决问题。化危机为转机。更可见商务智能的重要性。  商务智能应用的几个方面  对于一般企业来说,商务智能主要应用在以下几个方面。1.了解运营状况,2.衡量绩效。3.改善关系。4.创造获利机会。  企业引用商务智能的流程    商务智能的核心:根据企业数据库整合成可以作为分析用的数据仓库。再进一步通过分析技术来探索数据。  《Building the Data Warehouse》的作者William Inmon认为数据仓库必须具有面对主题,整合性,时间转化,不易变化四个特性。  联机分析简单来说就是能让用户根据本身决策需求来浏览数据。动态且实时的产生其所需的报表,以提高分析效率的技术。事实上,他除了能提供在线实时数据分析模块外,更重要的是能展示多维度的数据。  商务智能的另一项重要技术:数据挖掘:是指在大量数据库中寻找有意义或是有价值的信息的过程。通过机器学习技术或是统计分析方法论。根据整合的数据加以分析探索,发掘出隐含在数据中的特性。通过专业领域知识整合及分析。从中找出合理且有用的信息,经过相关部门针对该模型的评估后,再提供给相关决策单位加以运用。  企业间的竞争模式,从传统的“红海策略”,即采取压低成本与价格的杀价流血竞争。到近来倡导以创新为核心竞争力的“蓝海策略”,不论哪一种策略模式,都是不断地从研发,制造,营销,客服或资源配置等运营的相关问题上。寻求问题的发生原因,并尝试找出解决方案,而运营阶段中,陆续积累的庞大数据,往往就是答案的隐身之处。这也是数据挖掘的目的。  数据库仓库强大而实用,但有一个局限性。就是他实质上反映的过去的历史,由于数据仓库经常在特定周期或时间点进行加载和处理。因此他只是表示一个时间点上的快照。即使构建了实时或是近似实时的数据仓库,其数据仍然只表示当前和历史的数据。无法达到预测的需要。与传统的统计分析方法不同的是,数据挖掘不是让人提出假设。然后据此去找相关数据。而是让数据仓库确定数据相关性。并允许采用与以往不同的模式对数据进行分析。

WPF主题分享及使用

首先是一个很流行的WPF20多种xaml主题合集源码。这个主题系列是非常漂亮的。我找到了源码。但是没有找到官网。 update:感谢月亮云的提醒,官网是:http://wpfthemes.codeplex.com 截两幅图如下: 使用很简单。一种是将WPF.Theme.dll导入。像demo展示的那样。使用其提供的主题管理类来使用。可以实现任意切换效果。另一种就是直接把源文件的各种theme.xaml提取出来,添加到资源字典就行了。当然还有一些不重要的小细节。相信你对wpf比较了解的话可以搞得定的。。还可以自己学习一下。。 昨天还看到一个主题,也比较漂亮。Amazing WPF Controls分享一下。如果有什么疑问。欢迎留言讨论。 下载:WPF20多种xaml主题合集源码

Eclipse安装JavaCC

今年的编译原理课程上机实践是讲这个的。。要求用JavaCC来做一个简单的解释器。今天总算是有点时间找找文档先把这个安装了。安装过程很简单。。  1.希望你已经安装了Eclipse。。。  2.去sourceforge该项目主页下载javaCC压缩包  3.下载完成后解压到你的Eclipse根目录。会提示覆盖plugins和features。直接覆盖即可。  4.测试一下是否成功。具体步骤就是,打开eclipse,新建一个空java项目。然后对着项目点击右键new->other->javaCC->javaCC template file。然后选择命名空间。包名。和文件名就可以了。这个地方的什么的是由你建立的java项目决定的。所以你可以先把java项目设置好,然后直接选就可以了。。  5.点击运行。选择java application。控制台输出 Reading from standard input… Enter an expression like “1+(2+3)*4;": 完成。。。 Update:其实吧。这里安装的是JavaCC的插件。但是已经可以进行开发了。可能你需要一个例子来开始。或者你不喜欢eclipse。那么去JavaCC的项目下载你喜欢的即可。我下的是javacc-5.0.zip 里面有例子。可以参考。

C# 委托知识总结

如果你足够强大,你就不会把幸福押在别人身上,你会自己创造幸福或者给别人带来幸福。而变得强大的途径就是学习,就是读书,学一切东西,读任何想读的书。 爱你让我变得更强。。 继续读一些专业文章了。不保证都是原创,但是保证每篇技术文章的质量。也会注明来源,标准就是浅显易懂。但不简单。 原文来自:贺臣感谢原作者的好文章。 1.什么是委托,为什么要使用委托 我正在埋头苦写程序,突然想喝水,但是又不想自己去掉杯水而打断自己的思路,于是我就想让女朋友去给我倒水。她去给我倒水,首先我得让她知道我想让她干什么,通知她之后我可以继续写自己的程序,而倒水的工作就交给了她。这样的过程就相当于一个委托。 在程序过程中,当程序正在处理某个事件的时候,我需要另外的程序代码去辅助处理一些事情,于是委托另一个程序模块去处理,而委托就可以达到这种目的,我可以利用委托通知另外的程序模块,该去调用哪个函数方法。委托其实就起到了这样一个作用,将函数签名传递到了另一个函数中。或许这样讲还是有些模糊,看看后面的具体实例。 2.委托的定义 上面是定义两个委托的例子,其实很简单。声明一个委托使用delegate关键字,上面分别是定义的带返回值的委托和不带返回值的委托, 两个委托都有传递参数,当然也可以不传递参数。其实委托也是一个类,委托派生为System.MulticastDelegate,而System.MulticastDelegate 又继承System.Delegate,如果你知道这个也就明白委托其实是一个特殊的类。 委托的简单实用例子 在委托定义的例子中我们看到委托的使用方法是在委托实例化的时候指定的[new DelegateName(FunctionName)],这里可能表述不是太但是代码应该看得白了。 而委托的推断,并没有new 委托这个步骤,而是直接将Function 指定给委托。 (2).匿名函数 匿名委托例子 这是一个非常有特色的泛型委托,可能我们用的比较少,但是作用是不能忽视的。 我们看看三个非常具有代表性的泛型委托.现在.NET4.0已经出来了,但是泛型委托.NET2.0就出来了,Linq 大家用的那叫一个甜, 为啥 函数式编程风格,匿名方法,Lamda表达式表达式使用是如此的魅力。但是大家仔细观察过没有,Linq 中的方法有几个经常出现的参数: Func<T, E>:封装一个具有一个参数并返回 E 参数指定的类型值的方法,T 是这个委托封装方法的参数类型,E是方法的返回值类型。当然Func<T, Result> 只是其中的一种情况,这个委托还有其他的几种情况:Func<T> 这个是方法没有参数,返回值类型是T;Func<T1,T2,Result> 这个方法有两个参数,类型分别为T1,T2,返回值是Result,还有Func<T1,T2,T3,Result>,Func<T1,T2,T3,T4,Result> 这几中情况,具体情况就不介绍了.我们还可以通过扩展类型,扩展为更多的参数. Func 委托的使用