摘要: WPF快速指导10:WPF中的事件及冒泡事件和隧道事件(预览事件)的区别 本文摘要: 1:什么是路由事件; 2:中断事件路由; 3:自定义路由事件; 4:为什么需要自定义路由事件; 5:什么是冒泡事件和预览事件(隧道事件);1:什么是路由事件 WPF中的事件为路由事件,所谓路由事件,MSDN定义如下: 功能定义:路由事件是一种可以针对元素树中的多个侦听器(而不是仅针对引发该事件的对象)调用处理程序的事件。 实现定义:路由事件是一个 CLR 事件,可以由 RoutedEvent 类的实例提供支持并由 Windows Presentation Foundation (WPF) 事件系统来处理 阅读全文
posted @ 2011-02-04 15:51 陆敏技 阅读(11679) 评论(0) 推荐(8)
摘要: 好吧,我承认,这是一个反标题,实际的情况是:我找不到一个非用ICloneable不可的理由。事实上,接口ICloneable还会带来误解,因为它只有一个Clone方法。我们都知道,对象的拷贝分为:浅拷贝和深拷贝。ICloneable仅有一个Clone方法使我们无法从命名的角度去区分到底是哪个拷贝。浅... 阅读全文
posted @ 2011-02-02 10:35 陆敏技 阅读(15038) 评论(19) 推荐(8)
摘要: WPF快速指导6:触发器 本文摘要: 1:属性触发器; 2:数据触发器; 3:事件触发器; Style、ControlTemplate 和 DataTemplate 都有触发器集合。 属性触发器只检查WPF从属属性,而数据触发器则可检查任何一种可绑定的属性。属性触发器一般用来检查WPF可视元素的属性,而数据触发器则通常用来检查不可视对象的属性。 属性触发器:通过此机制,一个属性的更改会在另一个属性中触发即时或动态更改。 数据触发器:通过此机制,事件会在属性中触发动态更改。 数据触发器:EventTrigger,它根据事件的引发来启动一组操作,但这类操作仅限于动画。 一:属性触发器 查看代码片 阅读全文
posted @ 2011-01-31 15:54 陆敏技 阅读(3809) 评论(4) 推荐(6)
摘要: 托管代码中的字符串是一类特殊的对象,它不可被改变的,每次使用 System.String 类中的方法之一或进行运算时(如赋值、拼接等)时,都要在内存中创建一个新的字符串对象,也就是为该新对象分配新的空间。这就带来两个问题:1:原来的字符串是不是还在内存当中?2:如果在内存当中,那么机密数据(如密码)该如何保存才足够安全?先来看第一个问题:代码在Method1处打上断点,让VS执行到此处,在即时窗口中运行命令:.load sos.dll 和 !dso,如下:打开调试中的内存查看窗口,定位到019db820(由!dso得到)。由于此时还没有进入到Method1,所以内存当中不存在字符串“lumin 阅读全文
posted @ 2011-01-28 09:36 陆敏技 阅读(7035) 评论(14) 推荐(12)
摘要: Visual Studio 作为一种强大的开发平台,已经提供了非常多的调试手段。但这些调试手段相对来说还是停留在表面上,无非是设置断点、变量查看以及调用堆栈列表等。某些时候我们希望了解更多的东西,尤其是那些被隐藏到背后和运行期的东西,诸如对象运行状态、内存分布等等,这些相对底层的知识可以让我们更好地理解 .NET CLR / JIT 的一些行为。当然,并不是所有人都需要了解这些知识,毕竟汇编和高级... 阅读全文
posted @ 2011-01-27 14:46 陆敏技 阅读(4420) 评论(6) 推荐(3)
摘要: WPF快速指导5:验证 本文摘要: 1:WPF中的验证处理机制; 2:自定义验证规则; 3:如何显示验证错误信息 4:指定何时进行验证 1:WPF中的验证处理机制 接受用户输入的大多数应用程序都需要具有验证逻辑,以确保用户输入了需要的信息。验证检查可以基于类型、范围、格式或其他应用程序特定的要求。本节讨论了数据验证在 WPF 中的工作方式。 先来看一个简单的例子 后台: WPF中的验证处理机制是:当验证结果出现非法数据时,就会产生一个包含错误信息的ValidationError对象供界面进行显示。在使用了ExceptionValidationRule的情况下,这个错误对象会包含验证规则所 阅读全文
posted @ 2011-01-25 21:21 陆敏技 阅读(8608) 评论(1) 推荐(2)
摘要: WPF快速指导4:数据绑定之绑定方向与自定义转换器 本文摘要: 1:绑定目标与绑定源之间的方向; 2:自定义转换器; 1:绑定目标与绑定源之间的方向 该部分的定义MSDN已经描述的非常清楚了,如下: 您可能希望应用程序使用户可以更改数据并将数据传播回源对象。或者,您可能不希望允许用户更新源数据。您可以通过设置 Binding 对象的 Mode 属性来对此进行控制。下图演示不同类型的数据流: On... 阅读全文
posted @ 2011-01-24 20:13 陆敏技 阅读(5584) 评论(0) 推荐(5)
摘要: WPF快速指导3:数据绑定 本文摘要:1:实体类的绑定;2:实体类集合的绑定及DataTemplate;3:自定义的实体类集合,如ObservableDictionary; 4:Path的语法; 1:实体类的绑定 理解WPF数据绑定,首先需要理解接口INotifyCollectionChanged。 场景1:UI显示学生信息,当学生姓名发生改变的时候,就需要实时地表现到UI上。在这种情况下,就需要Student这个类实现INotifyCollectionChanged接口。如下: 可以看到,实体类Student需要实现的INotifyPropertyChanged 接口成员为:public 阅读全文
posted @ 2011-01-22 09:31 陆敏技 阅读(6637) 评论(1) 推荐(5)
摘要: WPF快速指导2:模板 本文摘要: 1:模板作用; 2:样式模板; 3:数据模板; 4:如何使用ControlTemplate; 5:如何使用DataTemplate; 一:模板作用 1:样式模板,在应用程序内部维护和共享外观; 2:数据模板,实现表现形式和逻辑的分离; 二:样式模板 如: 片段1: 三:数据模板 数据模板的作用就是实现表现形式和逻辑的分离。 查看如下的代码片段, 片段3: 这... 阅读全文
posted @ 2011-01-09 20:04 陆敏技 阅读(3004) 评论(2) 推荐(4)
摘要: C#中异常使用的注意事项一:两个立足点 1:正常控制流程下的代码运行并不会带来问题,只有引发异常才会带来效率问题。 2:不应将异常机制用于正常控制流中。二:需要引发异常的四类情况第一类情况是:如果运行代码后,造成内存泄漏、资源不可用或应用程序状态不可恢复,则引发异常。Console这个类中,有很多类似这样的代码:[代码]Console这个类虽然也提供了Tester-Doer模式,让调用者可以有更多的方法来验证输入。但是永远不要保证调用者对你的类有足够的了解,他有可能调用你的任何公开方法,而不会考虑先后顺序;所以应该为这类方法引发一些必要的异常。但是,如果你自己写了一个Student业务类 阅读全文
posted @ 2011-01-08 11:43 陆敏技 阅读(6102) 评论(7) 推荐(3)
摘要: C#资源释放及Dispose、Close和析构方法备注:此文的部分观点有误,之所以仍旧保留本文,是需要在后期给出一个勘误版。正确的版本在这里“C#中标准Dispose模式的实现”一:什么是资源在开始本文前,需要一些准备知识。首先要提出“什么是资源”。在CLR出来之后,Windows系统资源开始分为“非托管资源”和“托管资源”。 非托管资源是指:所有的Window内核对象(句柄)都是非托管资源,如对于Stream,数据库连接,GDI+的相关对象,还有Com对象等等,这些资源并不是受到CLR管理; 托管资源是指:由CLR管理分配和释放的资源,即由CLR里new出来的对象。其次再来讲,资源的释放方式 阅读全文
posted @ 2011-01-05 16:35 陆敏技 阅读(55040) 评论(30) 推荐(9)
摘要: 异常处理之ThreadException、unhandledException及多线程异常处理一:ThreadException和unhandledException的区别 处理未捕获的异常是每个应用程序起码有的功能,C#在AppDomain提供了UnhandledException 事件来接收未捕... 阅读全文
posted @ 2011-01-05 09:43 陆敏技 阅读(28108) 评论(14) 推荐(23)
摘要: WPF快速指导1:资源 本文摘要: 1:资源应用场景; 2:静态资源和动态资源; 3:Application.Current.Resources和Application.Current.Resources.MergedDictionaries 4:路径一:资源的应用场景场景1:格式化界面显示元素 所谓格式化界面显示元素,就是使用统一的风格来定义软件的每个界面。 要满足本需求,只需要在App.xaml中如下定义资源 同时,在每个页面如下引用资源即可: 场景2:动态更新界面风格 要动态更新界面风格,首先需要定义多种界面风格。假设有Sytle1和Style2两种风格,其中Style1在Style1 阅读全文
posted @ 2011-01-01 10:48 陆敏技 阅读(4856) 评论(6) 推荐(4)
摘要: 日常工作中,需要为程序集提供统计分析: 1:程序集方法数; 2:开发人员数目及各自所开发或REVIEW的方法数; 3:测试中,被标注有BUG的数目; 4:直接查看方法的IL代码; 鉴于以上统计的需要,特开发本EXE。 1:关于特性Attribute的知识补充 "Attribute是一种可由用户自由定义的修饰符(Modifier),可以用来修饰各种需要被修饰的目标"。它的作用是为它们的修饰目标追加上一些额外的信息——比如"这个类是我写的"或者"这个函数以前出过问题"等等。 它跟注释的区别是:注释是对程序源代码的一种说明,主要目的是给人看的,在程序被编译的时候会被编译器所丢弃,因此,它丝毫不会影响 阅读全文
posted @ 2010-12-29 11:48 陆敏技 阅读(4869) 评论(19) 推荐(2)
摘要: 即使是做网络应用,在断线情况下,也需要考虑数据的本地存储。在SQLite出现之前,数据量大的情况下,我们一直使用ACCESS,数据量小,则文件存储。ACCESS不支持事务原子性,在断电情况下(这种情况总是会发生)会导致数据很难恢复。一:安装SQLITE,是一款轻型的数据库,是遵守ACID的关联式数据... 阅读全文
posted @ 2010-12-19 10:55 陆敏技 阅读(32569) 评论(53) 推荐(21)
摘要: 并行 LINQ (PLINQ) 是 LINQ 模式的并行实现。PLINQ 的主要用途是通过在多核计算机上以并行方式执行查询委托来加快 LINQ to Objects 查询的执行速度。与顺序 LINQ 查询一样,PLINQ 查询对任何内存中 IEnumerable 或 IEnumerable(Of (T)) 数据源进行操作,并推迟执行,这意味着在枚举查询之前不会开始执行这些操作。主要区别是 PLINQ 尝试充分利用系统中的所有处理器。它利用所有处理器的方法是,将数据源分成片段,然后在多个处理器上对单独工作线程上的每个片段并行执行查询。在许多情况下,并行执行意味着查询运行速度显著提高。 通 阅读全文
posted @ 2010-12-06 11:31 陆敏技 阅读(1260) 评论(0) 推荐(0)
摘要: 任务并行库 (TPL) 基于任务的概念。术语“任务并行”是指同时运行的一个或多个任务。任务表示异步操作,在某些方面它类似于创建新线程或 ThreadPool 工作项,但抽象级别较高。任务提供两个主要好处:系统资源的使用效率更高,可伸缩性更好。在后台,任务排队到 ThreadPool,ThreadPool 已使用登山等算法进行增强,这些算法能够确定并调整到可最大化吞吐量的线程... 阅读全文
posted @ 2010-12-03 15:04 陆敏技 阅读(1734) 评论(0) 推荐(2)
摘要: 任务并行库 (TPL) 是 .NET Framework4 版的 System.Threading 和 System.Threading.Tasks 命名空间中的一组公共类型和 API。System.Threadings.Tasks 命名空间提供可简化并发和异步代码编写工作的类型。主要类型为 Task(表示可以等待和取消的异步操作)和 Task<(Of <(TResult>)&g... 阅读全文
posted @ 2010-12-02 15:28 陆敏技 阅读(3188) 评论(3) 推荐(1)
摘要: 基于如下的几个理由,需要为应用程序提供多个版本: 1:应用程序有体验版和完整功能版; 2:应用程序测试过程中需要完成一些自动化的操作; 1:提供体验版 关于第一点,所谓体验版也就是完整版的一个缩小版。即出于某种理由,不对用户开放应用程序的全部功能。 假设我的应用程序共有两类功能。第一类功能属于单机版,而完整版还提供在线功能。那么,在功能上,我需要定制两个属性"ONLINE"和"OFFLINE"。在体验版中,我只开放"OFFLINE"功能。 要实现此目的,我不想提供两套应用程序,而是想通过最小设置,就能为一个应用程序输出两个发布版本。这 阅读全文
posted @ 2010-11-30 09:24 陆敏技 阅读(4207) 评论(12) 推荐(2)
摘要: 本文摘要: 1:测试要求 2:在VS中运行自动化测试 3:脱离VS进行自动化测试 在上一文中《C#借助API实现黑盒自动化测试工具的编写》(http://www.cnblogs.com/luminji/archive/2010/11/03/1867730.html),我们使用WINDOWS API来实现自动化测试工具的编写。但是,这种办法在大型软件测试的时候,需要很细致和繁杂的工作。在VS2010出来以后,我们不妨看看Code UI Automation这个好东西。关于Code UI Automation已经有人介绍过很多,本文要说明的重点如下: 1:使用Code UI Automation来 阅读全文
posted @ 2010-11-18 09:30 陆敏技 阅读(11382) 评论(14) 推荐(4)
Web Counter
Coupon for Contacts