文章分类 - .NET 开发
摘要:AOP(面向切面编程:Aspect Oriented Programming)为诸如日志记录、性能统计、安全控制、事务处理、异常处理等与具体业务逻辑无关,却需要在全局范围进行执行的功能提供了一种良好重用和与业务逻辑解耦的实现思路。AOP思想是围绕着切面进行的,所谓“切面”就是目标对象的某种操作,其基本过程是在系统其它部分调用目标对象的某种操作时拦截这些调用,在进行真正的调用...
阅读全文
摘要:近日在研究WCF时觉得WCF的双工通讯特性是一个很棒的功能,其应用值得好好研究一番,因此选择“消息发布者-订阅者”这一典型场景作为应用主题,探讨一种利用WCF双工通讯特性实现分布式的“消息发布者-订阅者”模型的方法。 “消息发布者-订阅者”模型也就是一个事件监听和广播模型,消息的订阅者在需要的时候向发布者注册一个监听器,当发...
阅读全文
摘要:我们知道线程是比进程更小的任务调度单位,在.NET中应用程序域(AppDomain)是比进程更小的程序隔离单位,线程可以穿越多个应用程序域执行,同一时刻一个线程只执行在一个应用程序域中。我们还知道应用程序域提供的数据隔离使得在应用程序域之间传递的数据必须是可序列化的或者是 MashalByRefObject 类型。此外,我们还知道线程也通过线程静态字段(ThreadStaticAttribute)...
阅读全文
摘要:近日在做一个项目,涉及到跨 AppDomain 的处理,在使用 MarshalByRefObject 对象时遇到并解决了一些“诡异”的问题,故在此总结一下,与大家分享,也留日后备忘。 跨域传递数据时,只有两类数据可以传递:可序列化类型、MarshalByRefObject 派生类型。前者包括基本类型、使用了 SerializeAttribute 的类型、实现了ISeria...
阅读全文
摘要:本文通过日常开发中遇到的"异步执行和进度显示"的场景探讨策略模式与装饰者模式的应用。也许很多人都会遇到过这么一个场景:需要执行一系列的耗时很长的操作,在这过程中还需要不断地向界面显示操作的进度,通常以进度条、或者进度条+进度消息等形式展现。具体场景例如:文件的传送、下载,大量内容的搜索,程序的安装过程等等。在些场景里有一些共性,就是都可以分成两个部分:业务操作的执行、操作进度的显示。而由于一些特定...
阅读全文
摘要:开发中经常遇到要和各种各样的 XML 打交道,编辑 XML 文件时最头痛的便是要记住许多 XML 元素名称、属性名称。幸运的是,Vistual Studio 的 XML 智能提示功能可以大大地减轻这一痛苦。只需通过添加自定义的 XSD 文件使得在编辑 XML 文件时获得VS的智能提示,下面以 VS2008 为例: 第一步:将 XSD 文件 Copy 到VS安装目录下的 \Xml\Schemas 目...
阅读全文
摘要:C#组件开发人员 什么时候使用override?什么时候使用new? 什么叫shadowing? 重写父类的方法的时候用override以实现多态,当你想屏蔽父类成员的时候使用new,shadowing基本就是new与override区别等一些方面的问题,个人认为弄清override与new就没有必要特意考虑shadowing。 解释virtual、sealed、override和abstract...
阅读全文
摘要:Winform窗体通常都是矩形的,而本人在需要将一幅图片作为窗体背景,并且窗体边框呈现为图片外轮廓的不规则边缘时,却发现Framework并没有提供直接的实现。经过一通百度、Google和查阅 MSDN 后,发现实现的途径主要有以下几种:覆盖 Form本身的绘制,自己用代码重绘。设置窗体的 TransparencyKey 为窗体设置背景图片边缘要成为不规则边框的部分的颜色。根据图片或者其它的方式创...
阅读全文
摘要:多播委托(MulticastDelegate)继承自 Delegate ,表示多路广播委托;即,其调用列表中可以拥有多个元素的委托。实际上,我们自定义的委托的基类就是 MulticastDelegate。 在 C 或 C++ 中与委托最为相似的是函数指针。委托可以表示静态方法或实例方法。当委托表示实例方法时,委托不仅存储对方法入口点的引用,还存储对类实例的引用。与函数指针不同,委托是面向对象和类型...
阅读全文
摘要:实现应用程序的进程单例或者特定数量的控制有多种方式,而通过信号量实现则是最简单有效的办法,在.NET中我们可以通过 Multex、Semaphore 类来实现。
1、Mutex、Semaphore 简介
Mutex 是用于同步的线程或进程的互斥体。Multex 分为两种:未命名的局部互斥体和命名的系统互斥体。前者用于线程间的互斥,后者用于系统进程间的互斥。本文讨论的进程单例的实现将演示使用“命名的系统互斥体”。
Semaphore 是用于同步的线程或进程的信号量。Semaphore 也分为两种:未命名的局部信号量和命名的系统信号量。前者用于线程间的同步,后者用于系统进程间的同步。本文的进程实例数量的控制的实现将演示使用“命名的系统信号量”。
2、进程单例的控制
实现思路:通过在程序启动后创建特定名称的命名的系统互斥体,标识应用程序的进程实例,后来启动的进程实例如果发现已经存在该名称的命名互斥体时,则直接退出进程,这样便保持了进程实例的唯一。
阅读全文
摘要: 运行时自更新程序在实现上面对的主要问题上什么呢?
先说“更新”一词,“更新”有时也叫“升级”,“更新”程序的过程实际上就是以新的程序文件替换旧的程序文件的过程。在现实中,程序文件通常是由 .exe、.dll 以及其它的诸如xml,ini之类的用于配置的文件组成。在本文中是指.exe,.dll这些包含程序代码的文件。
“运行时更新”的主要问题是 .exe、.dll 文件在程序运行的时候会被系统锁定,因而进行文件替换的时候会被系统阻止。而如果把程序停止了再进行升级的话,而且无法由要升级的程序自身完成,得借助另一个程序完成,换句话说这不叫“运行时升级”了。本文里的“运行时升级”是指不中断正在运行的程序而同时进行程序文件的升级替换,升级完成后的新功能会在程序的下次运行后得以展现。
阅读全文

浙公网安备 33010602011771号