随笔分类 -  Windows

摘要:多线程揭秘Demo下载:多线程演示Demo介绍本文将通过一些例子来展示.net 中如何实现多线程,涉及到以下四部分。1 .线程概念2 .如何实现多线程3 .如何确保线程安全4 .死锁什么是进程一个进程就是一个可执行文件运行的操作系统上下文环境。它被用来分隔虚拟地址空间,线程,对象句柄(指向类似文件这样的资源的指针),以及环境变量,进程还有一些类似优先级类和最大内存分配的属性。也就是说:1 .一个进程就是一个包含资源的内存块。2 .操作系统执行的一个单独的任务。3 .一个正在运行的软件4 .一个进程拥有一个/多个操作系统线程一般的。一个进程最大可以是4GB的内存空间,这块内存是安全,私有,其他进 阅读全文
posted @ 2013-02-06 13:56 lazycoding 阅读(2699) 评论(8) 推荐(0) 编辑
摘要:1.什么是Lambda表达式Lambda表达式是一个匿名方法,通常在LINQ中被用来创建委托简单来说。它是一个没有声明,没有访问修饰符,没有返回值。甚至没有名字的方法。2.为什么我们需要使用Lambda表达式?或者说为什么我们要写一个没有名字的函数?为了方便,这种快捷方式允许你在调用的地方直接编写代码,尤其是你想调用的代码只会在这个地方使用一次。并且方法体本身很短。节省了单独写方法中写声明等等的麻烦。。好处1.代码量减少。不必写方法的名称。返回值和访问修饰符2.当阅读代码的时候。直接就可以看到被调用函数的代码,不用去别的地方。Lambda表示应该短些。太复杂了。可读性就下降了如果编写Lambd 阅读全文
posted @ 2012-12-08 19:33 lazycoding 阅读(1034) 评论(1) 推荐(1) 编辑
摘要:很早的时候,学习数据结构的时候。收集了一下演示的动画。帮助理解。但是不全。今天在看KMP算法的时候。看到了福州大学的一个精品课程。。81个演示动画呢。。想打包下载收藏。话说福州大学这才是好样的。踏踏实实搞学术。第一种方法就是手工了。。嘎嘎。你敢么。一个个下载。。。一个个改名。。第二种就是用整站下载的软件了。。但是我看了一下swf的命名。我就知道下载下来意义不大。因为名字不好理解。第三种就是自己写个程序吧。。整体思路,首先访问课程页面,解析得到每一章的标题和内容,然后创立章节文件夹,得到每个动画对应的html页面,然后对html页面解析,提取swf地址。然后下载就行了。比较疼的地方是那个页面用的 阅读全文
posted @ 2012-12-03 20:37 lazycoding 阅读(7339) 评论(21) 推荐(17) 编辑
摘要:坊间流传的代码都有些问题,比如不能正常获取win7以上的版本信息,不能获取诸如专业版,旗舰版等的信息,不能正常获取操作系统位的信息。使用代码,写了一个简单的库来实现效果。用法大概如下:StringBuilder sb = new StringBuilder(String.Empty);sb.AppendLine("Operation System Information");sb.AppendLine("----------------------------");sb.AppendLine(String.Format("Name = {0}& 阅读全文
posted @ 2012-11-23 13:33 lazycoding 阅读(992) 评论(0) 推荐(0) 编辑
摘要:昨天读完了程杰的《大话设计模式》。。收获颇丰。深刻感到了设计模式的伟大。。对面向接口的编程也理解了不少。刚好看到codeproject上一篇将依赖倒置的。讲到了依赖注入的方式。仔细读了一下。翻译一遍加深认识。高耦合的代码随着项目复杂性的不断增加,最终会变成一碗碗的意大利面条啦。。二者通常是软件设计上的问题,如果一个类对另一个类的实现了解太多。当该类改变的时候会引起更多的改变。这违反了依赖倒置原则而松耦合的代码设计优良。随着时间流逝,代码复杂两增大,松耦合的好处会变得更加清晰,依赖注入模式是实现松耦合的一个好的办法,本文介绍在没有依赖注入容器的情况下实现依赖注入GoF说了,依赖倒置的原则:高层模 阅读全文
posted @ 2012-11-21 19:51 lazycoding 阅读(5010) 评论(5) 推荐(1) 编辑
摘要:Throw会抛出/传递异常,通过在catch块里使用throw语句.可以改变产生的异常,比如我们可以抛出一个新的异常,throw语句有各种各样的,并且很有必要.例子我们首先看一下三个方法,分别叫做A,B,C,他们使用不同的throw语句。方法A使用了无参的throw语句。这可以被看作是rethrow(继续抛出)—他会抛出已经出现的同样的异常继续,方法B throw一个命名的异常变量。这就不是一个完全的rethrow了—因为他虽然抛出了同样的异常。但是改变了StackTrace(堆栈轨迹),如果有必要的话,我们可以收集一些异常信息,而方法C则创建了一个新的异常。提示:你可以通过这种方法实现自定义 阅读全文
posted @ 2012-11-18 12:36 lazycoding 阅读(30751) 评论(0) 推荐(2) 编辑
摘要:著作权声明:本文由http://leaver.me翻译,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢!介绍本文实现模板模式背景有时候我们需要做很多任务,而做这些任务的算法可能不同,这样可以设计成策略模式,这样。执行该任务的基本的一些代码就是一样的。但程序可可以动态的切换来执行任务的不同部分了。现在,真实的情况是有些算法,从实现层面山看,有可能有一些步骤是不一样的,这种情况下。我们可以使用继承来完成。当有个算法,而这个算法的一部分却多样的时候。使用模板模式就很好。GoF定义模板模式为:"Define the skeleton of an algorithm in 阅读全文
posted @ 2012-10-25 22:12 lazycoding 阅读(329) 评论(0) 推荐(0) 编辑
摘要:著作权声明:本文由http://leaver.me翻译,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢!介绍本文介绍外观模式,并给出简单的实现示例背景写软件的时候,有时候需要处理一系列的对象来完成一个确定的任务.比如,我们给一个万能遥控器写代码,我们需要关掉所有的设备,那么,我们有这样几种选择.第一个就是手动选择每一个设备,然后一个接一个的关闭,这好傻.那我们为什么不再遥控器上放一个按钮,我们按一下就关掉了.按钮的命令会与设备控制器通信然后关掉他们.如果我们又想在晚上12的时候自动关闭设备,那么我们就会有一个基于事件的计时器,与设备通信,然后关闭设备,问题是在两种情况下我们 阅读全文
posted @ 2012-10-23 18:44 lazycoding 阅读(1122) 评论(0) 推荐(1) 编辑
摘要:著作权声明:本文由http://leaver.me翻译,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢!背景本文讨论装饰器模式,这个模式是因为很多情况下需要动态的给对象添加功能.比如我们创建了一个Stream类.后来需要对这个数据流类动态的添加一个加密功能.有人可能说把加密方法写到流类里面啊.然后使用一个bool变量来控制开关就行了.但是这样.这个加密方法只能写一种..如果用派生类来实现.那么..对于不同的加密方法.,都要创建一个子类,举个例子.比如有时候是一些函数的组合.我们最终的派生类的数目基本上就和排列组合的数目一样了.我们使用装饰器模式来解决这个问题.GoF描述为& 阅读全文
posted @ 2012-10-22 11:37 lazycoding 阅读(1454) 评论(6) 推荐(1) 编辑
摘要:著作权声明:本文由http://leaver.me 翻译,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢!本文用C#实现原型模式,也会讨论深浅拷贝,已经如何在.net中高效实现ICloneable 接口介绍有时候我们需要从上下文得到一个对象的拷贝,然后通过一些独立的操作来处理他。原型模式在这种情况下很适用GoF 定义原型模式为用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。Specify the kind of objects to create using a prototypical instance, and create new objects by 阅读全文
posted @ 2012-10-20 20:04 lazycoding 阅读(958) 评论(0) 推荐(0) 编辑
摘要:这是Office2010中的文件菜单点开后的效果。本文我将以强大的WPF来实现类似的效果。希望你能有所收获。而不是只拷贝/粘贴代码而已。开始之前。先把TabControl找个地方放着。<Window x:Class="TestClient.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Ma 阅读全文
posted @ 2012-10-17 10:01 lazycoding 阅读(3315) 评论(6) 推荐(2) 编辑
摘要:有时候对于对象来说。在一个软件中,不直接通过互相引用而做到共享信息是非常有用的。比如像带有插件的软件。可以互相进行通信。假设我们有了很多对象。其中一些包含一些数据。而另一些对象需要消费这些数据 不同的子集,我们不通过对数据生产者和消费者的直接引用来实现,而是通过更低耦合的方式。叫做创建一个“BlackBoard”(黑板)对象。该对象允许其他对象自由对其进行读取/写入数据。这种解耦方式使得消费者不知道也不必知道数据来自哪里。如果想要了解更多关于黑板模式的信息。我们常说的。Google是你最好的朋友。 一个最简单的黑板对象应该是 Dictionary一些简单的命名值的字典。所有的对象共享同一个字. 阅读全文
posted @ 2012-10-16 12:12 lazycoding 阅读(1886) 评论(0) 推荐(1) 编辑
摘要:简单科普文,作者给的Demo我合并了下。VS2010直接打开解决方案。二者都有。介绍本文展示在WPF中如何创建用户控件并且如果在WPF项目中使用。我将使用VS2008和C#来展示如何创建一个自定义的ToolTip背景这篇由Sacha Barber.写的和我的有点像。使用代码开始。首先,我们创建一个用户控件。因此,我们选择新建WPF用户控件类库(WPF User Control Library)。现在。我们可以创建或者编辑XAML代码来创建自定义的用户控件了。我使用XAML来创建自定义的ToolTip。你想做什么随你。<UserControl Name="UserControlT 阅读全文
posted @ 2012-10-15 08:37 lazycoding 阅读(8218) 评论(1) 推荐(5) 编辑
摘要:介绍最近,我发现我需要个圆角多边形。而且是需要在运行时从用户界面来绘制。WPF有多边形。但是不支持圆角。我搜索了一下。也没找到可行的现成例子。于是就自己做吧。本文描述了圆角多边形的实现,也包括如何用在你的项目里。在Demo里面的RoundedCornersPolygon 类是完整的实现。下载的Demo包括两部分1. 通过XAML绘制圆角多边形2. 运行时创建圆角多边形背景多边形可以被认为是沿着一个给定半径的圆的边缘和一些指定点/边。所构成的点的集合。在WPF中。你可以给Polygon对象的Points属性添加一系列的点来制作多边形。XAML方式<Canvas> <Polygo 阅读全文
posted @ 2012-10-13 09:49 lazycoding 阅读(13270) 评论(1) 推荐(6) 编辑
摘要:图11.介绍从我开始使用vista的时候,我就非常喜欢它的圆形玻璃按钮。WPF最好的一个方面就是允许自定义任何控件的样式。用了一段时间的Microsoft Expression Blend后。我做出了这个样式。我觉得做的还行。因为。我决定分享。如我所说。我使用Microsoft Expression Blend来做。但是。我也是用XAML编辑器--Kaxaml。2.概述玻璃按钮样式包含了三层。组织了玻璃效果(Glass Effect)和一个ContentPresenter 来存储按钮的内容。所有的这些层都在一个最外层的Grid里。当鼠标放到按钮上,按下去的时候也定义了一些触发器(Trigger 阅读全文
posted @ 2012-10-12 09:33 lazycoding 阅读(9861) 评论(2) 推荐(3) 编辑
摘要:WPF里是没有LinkLabel控件的。因此我自己写一个。首先。我们看一下WPF中什么类似的组件可以实现这个链接功能如果你想要模拟一个LinkLabel控件。你可以在TextBlock里使用内联的Hyperlink。像下面这样<TextBlock> <Hyperlink> <Run Text="Test link"/> </Hyperlink></TextBlock>你可以使用Label控件。加一个内联的HyperLink,但是我认为TextBlock更好。因为你可以在Expression Blend中通过Inli 阅读全文
posted @ 2012-10-11 13:28 lazycoding 阅读(3700) 评论(2) 推荐(1) 编辑
摘要:介绍这是我在CodeProject上的第一篇文章。我希望对你有用当我开发软件的时候。我通常因为一个很耗时是任务需要完成。而请求让用户等待,并且通过也允许用户取消。不论我做何种操作(比如下载文件。保存大文件等等)。我都需要做下面几件事:通过一个模态对话框来让用户等待操作完成能让用户看到进度。能让用户随时取消。我搜了好久也没找到拿来就能用的窗体控件,也许是我没找到。于是我自己写。。图1背景BackgroundWorker 类包含了我需要完成任务的所有东西。我只需要给他提供一个对话框。使用代码ProgressForm 包含了一个BackgroundWorker ,你要做的仅仅就是提供了一个完成工作的 阅读全文
posted @ 2012-10-10 09:08 lazycoding 阅读(5836) 评论(15) 推荐(4) 编辑
摘要:1 介绍我知道。网上有很多现成的FTP软件。但是。我们也想要了解FTP的一些底层机构,因此。 这个开源的项目在你学习FTP知识的时候也许对你有些帮组。程序的界面看起来像FileZilla,FileZilla虽然流行但是有些bug,当我打开我博客的时候总是有问题。我需要通过FTP连接我的服务器。发送文件,下载文件等等。因为。我决定写我自己的软件来处理所有的情况。FileZilla足够好。但它不是我的。2 背景看看我们已经知道的。我们知道FTP是一个标准的基于TCP网络协议。用于从一个主机向另一个主机传输文件。它是一个C/S架构。图2FTP程序曾经是基于命令行的。我们仍沿可以通过cmd.exe连接 阅读全文
posted @ 2012-10-09 09:05 lazycoding 阅读(15351) 评论(14) 推荐(7) 编辑
摘要:介绍 使用ListViewLayoutManager 可以控制ListView/GridView列的布局1. 固定列宽:有着固定列宽的列2. 范围列宽:有着最小最大宽度的列3. 比例列宽:成比例的列宽范围列宽可以限制列的宽度,也包括填充列的剩余可视区域。据我们了解的Html中的表格和Grid空间。比例列以一个百分比来定义列宽,以下几个因素共同确定了比例列的宽度。1. 垂直ListView滚动条的可视与否2. ListView控件宽度的改变3. 非比例列宽度的改变本程序支持通过XAML或是后台代码来控制ListView。如果通过XAML来控制。则允许ListViewLayoutManager . 阅读全文
posted @ 2012-10-06 19:13 lazycoding 阅读(1872) 评论(0) 推荐(0) 编辑
摘要:今天早上翻译了Yet-Another-XML-Serialization-Library-for-the-NET,将近4个小时把30页的文档翻译完了。因为文章很长。重新排版压力太大。。我把翻译好的做成了pdf,所以本文只列出前两部分。如果不符合规则。请管理员撤下。文档下载:XML序列化神器整个文档目录如下:目录1介绍... 12 为什么使用YAXLib. 23 YAXLib使用指南... 23.1 基本的使用和格式化... 23.2 序列化集合类的对象... 53.3 序列化字典类... 83.4 序列化嵌套的对象... 133.5 添加xml注释... 174 反序列化和错误处理机制... 阅读全文
posted @ 2012-10-05 16:40 lazycoding 阅读(2276) 评论(6) 推荐(2) 编辑