﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-玩转C科技.NET</title><link>http://www.cnblogs.com/volnet/</link><description>每天都在学习，每天都在退步
为什么？世界发展太快！
怎么办？加快学习速度！
如何做？关注.NET社区
进阶中……        </description><language>zh-cn</language><lastBuildDate>Sun, 06 Jul 2008 05:48:17 GMT</lastBuildDate><pubDate>Sun, 06 Jul 2008 05:48:17 GMT</pubDate><ttl>60</ttl><item><title>关于“指定的参数已超出有效值的范围。参数名 utcDate”的解决方案</title><link>http://www.cnblogs.com/volnet/archive/2008/05/27/1208047.html</link><dc:creator>volnet（可以叫我大V）</dc:creator><author>volnet（可以叫我大V）</author><pubDate>Mon, 26 May 2008 17:19:00 GMT</pubDate><guid>http://www.cnblogs.com/volnet/archive/2008/05/27/1208047.html</guid><wfw:comment>http://www.cnblogs.com/volnet/comments/1208047.html</wfw:comment><comments>http://www.cnblogs.com/volnet/archive/2008/05/27/1208047.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/volnet/comments/commentRss/1208047.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/volnet/services/trackbacks/1208047.html</trackback:ping><description><![CDATA[<p>很多朋友已经习惯了在组件或者页面开发时使用内嵌资源的方式进行资源输出，这样的好处包括如下一点，就是利用部分浏览器的相关机理来缓存这些文件而不必每次都加载，它们通常通过一个时间戳来表示该项内容是应该从缓存（客户端本地）中读取还是重新下载（远端服务器），而这个时间戳就被跟在了下载该资源的链接上了。</p> <p>按说大家通常在测试的时候都是单机环境，因此通常不会发生什么问题，但是在生产环境中或者迁移到别人的机上就会出现一些问题了。</p> <div style="font-size: 9pt; width: 600px"> <h2><em>指定的参数已超出有效值的范围。<br>参数名: utcDate</em> </h2><strong>说明: </strong>执行当前 Web 请求期间，出现未处理的异常。请检查堆栈跟踪信息，以了解有关该错误以及代码中导致错误的出处的详细信息。 <br><br><strong>异常详细信息: </strong>System.ArgumentOutOfRangeException: 指定的参数已超出有效值的范围。<br>参数名: utcDate<br><br><strong>源错误:</strong> <br><br> <table width="756" bgcolor="#ffffcc"> <tbody> <tr> <td width="756">执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。 </td></tr></tbody></table><br><strong>堆栈跟踪:</strong> <br><br> <table width="756" bgcolor="#ffffcc"> <tbody> <tr> <td width="754">[ArgumentOutOfRangeException: 指定的参数已超出有效值的范围。&nbsp; 参数名: utcDate]&nbsp;&nbsp;&nbsp;&nbsp; System.Web.HttpCachePolicy.UtcSetLastModified(DateTime utcDate) +3352419&nbsp;&nbsp;&nbsp;&nbsp; System.Web.HttpCachePolicy.SetLastModified(DateTime date) +47&nbsp;&nbsp;&nbsp;&nbsp; System.Web.Handlers.AssemblyResourceLoader.System.Web.IHttpHandler.ProcessRequest(HttpContext context) +1904&nbsp;&nbsp;&nbsp;&nbsp; System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +358&nbsp;&nbsp;&nbsp;&nbsp; System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean&amp; completedSynchronously) +64&nbsp; </td></tr></tbody></table><br> <hr color="silver" size="1" width="100%"> <strong>版本信息:</strong> Microsoft .NET Framework 版本:2.0.50727.1433; ASP.NET 版本:2.0.50727.1433  <p></p></div> <p>因为通常这时候网页并不会加载错误，所以我们可以很明确的知道并不是页面生命周期内发生了异常。如果是脚本资源，通常我们打开IE的脚本调试功能会弹出对象无法初始化的错误以及一些脚本异常。如果是css文件则会出现样式丢失的现象。既然不是页面生命周期内发生了错误，我们没有理由去检查代码，特别是当代码曾一度辉煌，我们更没有理由去那么怀疑。这时候我们有理由想到托管我们代码的IIS，仔细观察提示我们应该对utcDate有一个比较深的印象。如果我们的资源是在未来创建的呢？oh，这不可能，但是当我们将系统的时间改成比资源文件的创建时间更早的时候就有理由相信这一切就成为可能了。</p> <p>解决方案：</p> <p>1、通过修改服务器系统时间，让其比Assembly的时间要晚，则可以了。（这适合于Assembly是别人创建的时候，当然也适合自己拥有源码的时候）。</p> <p>2、通过修改Assembly的创建时间，让其早于服务器的时间，则可以了。（这适合于服务器是别人的，当然也适合于服务器是自己的情况）。</p><img src ="http://www.cnblogs.com/volnet/aggbug/1208047.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37548/" target="_blank">[新闻]微软高管：Wii用户最终会成为Xbox 360用户</a>]]></description></item><item><title>关于《博客园精华集》第一轮收录情况（仅针对2008年5月19日起的一些文章的记录）</title><link>http://www.cnblogs.com/volnet/archive/2008/05/20/excerption-after-20080519-part1.html</link><dc:creator>volnet（可以叫我大V）</dc:creator><author>volnet（可以叫我大V）</author><pubDate>Mon, 19 May 2008 16:57:00 GMT</pubDate><guid>http://www.cnblogs.com/volnet/archive/2008/05/20/excerption-after-20080519-part1.html</guid><wfw:comment>http://www.cnblogs.com/volnet/comments/1202929.html</wfw:comment><comments>http://www.cnblogs.com/volnet/archive/2008/05/20/excerption-after-20080519-part1.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/volnet/comments/commentRss/1202929.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/volnet/services/trackbacks/1202929.html</trackback:ping><description><![CDATA[<p>首先，很高兴能够参与到《博客园精华集》一书的编定工作中来，为这个充满激情的团队而感到骄傲和自豪。</p> <p>博客园就像知识的海洋浩瀚无边，2008年5月19日之前的文章我们将通过其他方式进行逐一审核统计，对于2008年5月19日之后的文章，将由我进行整理收录，但这并不代表您的大作会发表到博客园精华集，具体情况暂时不做过多说明，请关注相关公告。</p> <p>对于2008年5月19日以后的文章我做几点说明，因为时间和精力的关系，我仅仅只能关注发表在博客园首页的文章，对于翻译和转载的文章将不予以收录，如果您的文章足够优秀而没有发表在首页的，请及时和我联系或者跟贴留言也可以。如果您的文章发表在首页，但是您根本不想被收录进博客园精华集，也请您与我联系或者跟贴留言。如果因为我的失误而导致了文章分类错误，请及时告诉我，我将根据实际情况为您解决。如果您还有什么疑问，请及时提出，我们将尽力为您解决。</p> <p><strong>最近一次更新：2008年5月29日</strong></p> <p>-1、其它</p> <p>《<a href="http://www.cnblogs.com/xdesigner/archive/2008/05/19/1202313.html">C#发现之旅第二讲 C#－XSLT开发</a>》</p> <p>《<a href="http://www.cnblogs.com/xdesigner/archive/2008/05/21/1203728.html">C#发现之旅第三讲 使用C#开发基于XSLT的代码生成器</a>》</p> <p>《<a href="http://www.cnblogs.com/onlytiancai/archive/2008/05/21/1203688.html">蛙蛙推荐：蛙蛙教你索引邮件</a>》</p> <p>《<a href="http://www.cnblogs.com/zhuweisky/archive/2008/05/21/1204230.html">使用动态代理，提高工作效率</a>》</p> <p>《<a href="http://www.cnblogs.com/doriandeng/archive/2008/05/23/1205711.html">深入 Unity 1.x 依赖注入容器之三：获取对象</a> (多)》</p> <p>《<a href="http://www.cnblogs.com/virusswb/archive/2008/05/26/1207989.html">窗体传值,子窗体,父窗体,反射,reflection,windows,组策略,gpedit.msc,动态创建窗体,谢谢</a>&nbsp;<a href="http://www.cnblogs.com/virusswb/archive/2008/05/27/1208109.html">2</a>&nbsp;<a href="http://www.cnblogs.com/virusswb/archive/2008/05/27/1208269.html">3</a>》</p> <p>《<a href="http://www.cnblogs.com/xingzhixp/archive/2008/05/26/monorhel43.html">在RedHat Enterprise 4 上安装 Mono1.9 （三）</a>》(Linux)</p> <p>《<a href="http://www.cnblogs.com/uubox/archive/2008/05/27/1208248.html">适用于显示Web项目和DLinq调试信息的小程序</a>》</p> <p>《<a href="http://www.cnblogs.com/minbear/archive/2008/05/28/1209005.html">ASP.NET中OutOfMemoryException异常的处理方案</a>》<br>0、NA<br>1、设计模式</p> <p>《<a href="http://www.cnblogs.com/ASPNET2008/archive/2008/05/21/1203996.html">工厂模式兄弟姐妹</a>》</p> <p>《<a href="http://www.cnblogs.com/henryfan/archive/2008/05/23/1206056.html">发布一个用Emit实现的对象创建工厂</a>》</p> <p>《<a href="http://www.cnblogs.com/kyorry/archive/2008/05/25/1207095.html">重写报销流程，责任链模式实现</a>》</p> <p>《<a href="http://www.cnblogs.com/tsoukw/archive/2008/05/29/1210050.html">解耦的故事--权限设计</a>》<br>2、ASP.NET1.1<br>3、ASP.NET2.0</p> <p>《<a href="http://www.cnblogs.com/daizhj/archive/2008/05/23/1203879.html">DinnerNow中的ASP.NET Ajax Extensions应用---选餐流程</a>》</p> <p>《<a href="http://www.cnblogs.com/harryguo/archive/2008/05/23/1205821.html">net2.0多语言网页的实现</a>》</p> <p>《<a href="http://www.cnblogs.com/anjou/archive/2008/05/25/1206832.html">WebClient 保持 Session 和 Cookie</a>》</p> <p>《<a href="http://www.cnblogs.com/tedzhao/archive/2008/05/26/1206514.html">ASP.NET 2.0 Client Callback 浅析</a>》</p> <p>《<a href="http://www.cnblogs.com/RickTsuei/archive/2008/05/27/1208082.html">可配置WebPart解决方案</a>》</p> <p>《<a href="http://www.cnblogs.com/nokiaguy/archive/2008/05/29/1209858.html">Web上传文件的原理及实现</a>》<br>4、Web标准<br>5、网站维护、性能、安全经验、SEO</p> <p>《<a href="http://www.cnblogs.com/perfectdesign/archive/2008/05/27/verifycode.html">几种验证码方式对比</a>》</p> <p>《<a href="http://www.cnblogs.com/RickTsuei/archive/2008/05/29/1210101.html">Log4Net - 写日志记录到Udp服务器(UdpAppender)</a>》<br>6、HTML/CSS<br>7、JavaScript</p> <p>《<a href="http://www.cnblogs.com/dingxue/archive/2008/05/19/1202305.html">用javascript操纵GridView中CheckBox的两个常用技巧</a>》</p> <p>《<a href="http://www.cnblogs.com/dingxue/archive/2008/05/19/1202303.html">用javascript/css实现GridView行背景色交替、点击行变色</a>》</p> <p>《<a href="http://www.cnblogs.com/GrayZhang/archive/2008/05/22/1205227.html">[原创]jQuery小插件-collapsible</a>》</p> <p>《<a href="http://www.cnblogs.com/cloudgamer/archive/2008/05/23/1205642.html">JavaScript 图片切换效果(ie only)</a>》</p> <p>《<a href="http://www.cnblogs.com/AganCN/archive/2008/05/24/1206272.html">javascript事件监听</a>》</p> <p>《<a href="http://www.cnblogs.com/johnson2008/archive/2008/05/29/1209781.html">JavaScript面向对象编程（2）-- 类的定义</a>》<br>8、AJAX</p> <p>《<a href="http://www.cnblogs.com/shenyisyn/archive/2008/05/20/1203077.html">利用回调实现脚本实体类和模拟Ajax</a>》</p> <p>《<a href="http://www.cnblogs.com/jeff377/archive/2008/05/25/1206842.html">撰写自用的 ScriptManager 来管理客户端指令码</a>》</p> <p>《<a href="http://www.cnblogs.com/nokiaguy/archive/2008/05/25/1207157.html">AJAX从服务端获取数据的三种方法</a>》<br>9、SliverLight<br>10、WPF</p> <p>《<a href="http://www.cnblogs.com/foundation/archive/2008/05/23/1205892.html" target="_blank">3ds Max建模，Blend设计,VS2008控制WPF的3D模型例子</a>》</p> <p>《<a href="http://www.cnblogs.com/zhouyinhui/archive/2008/05/26/1207409.html">[WPF疑难]ErrorTemplate显示与隐藏问题</a>》<br>11、WCF</p> <p>《<a href="http://www.cnblogs.com/daizhj/archive/2008/05/19/1202600.html">DinnerNow中的WCF应用1 --- 首页数据加载</a>》</p> <p>《<a href="http://www.cnblogs.com/yunkunyang/archive/2008/05/23/1205923.html">Extending WCF(四)—一个统一处理异常、日志的解决方案</a>》</p> <p>《<a href="http://www.cnblogs.com/RickTsuei/archive/2008/05/24/1206251.html">WCF学习笔记-1 服务的定义与消费</a>》</p> <p>《<a href="http://www.cnblogs.com/montaque/archive/2008/05/26/1207576.html">Hello,Biztalk 2006 R2 BAM, WCF 集成</a>》</p> <p>《<a href="http://www.cnblogs.com/mextb1860/archive/2008/05/27/1208217.html">WCF传输大数据量DataSet</a>》<br>12、WF</p> <p>《<a href="http://www.cnblogs.com/foundation/archive/2008/05/23/1205430.html">WF3.5 的SendActivity、ReceiveActivity与WorkflowServiceHost(1)</a>》</p> <p>《<a href="http://www.cnblogs.com/daizhj/archive/2008/05/26/1205113.html">DinnerNow中的Work Flow应用(上) --- 订单流程 </a>&nbsp;<a href="http://www.cnblogs.com/daizhj/archive/2008/05/29/1205668.html">(下)</a>》</p> <p>《<a href="http://www.cnblogs.com/carysun/archive/2008/05/28/EventHandle.html">坚持学习WF(9):本地服务之事件处理</a>》<br>13、LINQ</p> <p>《<a href="http://www.cnblogs.com/ziie/archive/2008/05/26/1207207.html">使用linq to xml 快速创建自己的Rss</a>》</p> <p>《<a href="http://www.cnblogs.com/ziie/archive/2008/05/28/1208817.html">使用linq to xml 快速创建自己的Rss 之二 Syndication篇</a>》<br>14、MVC</p> <p>《<a href="http://www.cnblogs.com/zhb/archive/2008/05/23/1205547.html">对Asp.Net　MVC架构的用后感想</a>》</p> <p>《<a href="http://www.cnblogs.com/jun1st/archive/2008/05/24/1206204.html">Asp.Net MVC 入门篇——Overview</a>》</p> <p>《<a href="http://www.cnblogs.com/QLeelulu/archive/2008/05/24/1206624.html">ASP.NET MVC - 使用Post, Redirect, Get (PRG)模式</a>》</p> <p>《<a href="http://www.cnblogs.com/leven/archive/2008/05/27/1208741.html">Asp.Net MVC实践 (基于ASP.NET MVC Preview 2)</a>》</p> <p>《<a href="http://www.cnblogs.com/jun1st/archive/2008/05/30/1210387.html">Asp.Net MVC---Walkthrough</a>》</p> <p>《<a href="http://www.cnblogs.com/daizhj/archive/2008/05/29/1209757.html">推荐一个基于Microsoft ASP.NET MVC Preview 2 的应用示例</a>》</p> <p>《<a href="http://www.cnblogs.com/szw/archive/2008/05/29/1209915.html">ASP.NET MVC Preview3 bug 及期望 [集]</a>》</p> <p>《<a href="http://www.cnblogs.com/leven/archive/2008/05/29/1210215.html">Asp.Net MVC实践 - 自定义ActionResult实现Rss输出 (基于ASP.NET MVC Preview 3)</a>》</p> <p>《<a href="http://www.cnblogs.com/jun1st/archive/2008/05/30/1210387.html">Asp.Net MVC---Walkthrough</a>》<br>15、SharePoint/MOSS<br>16、VSTO<br>17、VSTS</p> <p>《<a href="http://www.cnblogs.com/westsourcer/archive/2008/05/19/1202393.html">Visual Studio解决方案(.Sln)和Wise安装脚本(.Wse)的命令行编译</a>》</p> <p>《<a href="http://www.cnblogs.com/jeff377/archive/2008/05/19/1202803.html">CollectionEditor 显示 [说明] 区域</a>》<br>18、SQLServer</p> <p>《<a href="http://www.cnblogs.com/aspnetx/archive/2008/05/21/1204174.html">Sqlserver2008数据引擎特性之空间数据预先体验</a>》</p> <p>《<a href="http://www.cnblogs.com/shenyisyn/archive/2008/05/20/1203061.html">数据挖掘初探-用简单公式预测下月数据</a>》</p> <p>《<a href="http://www.cnblogs.com/nokiaguy/archive/2008/05/21/1203801.html">使用Transact-SQL进行数据导入导出方法详解</a>》</p> <p>《<a href="http://www.cnblogs.com/drc/archive/2008/05/21/1204237.html">发现一个SQLSERVER数据库的编绎解析问题</a>》</p> <p>《<a href="http://www.cnblogs.com/slightboy/archive/2008/05/21/1204281.html">MSSQL 2005 分页分析及优化 </a>》</p> <p>《<a href="http://www.cnblogs.com/dannyr/archive/2008/05/22/1204554.html">Access数据库的文本、备注数据类型的COLUMN_FLAGS说明</a>》</p> <p>《<a href="http://www.cnblogs.com/rottenapple/archive/2008/05/23/1205623.html">使用Oracle Generic Connectivity连接SqlServer </a>》</p> <p>《<a href="http://www.cnblogs.com/killkill/archive/2008/05/23/1205792.html">[原创]SQL Server 2005 镜像构建手册</a>》</p> <p>《<a href="http://www.cnblogs.com/yukaizhao/archive/2008/05/23/sql_get_row_date.html">sql取所有记录中每天的最后一笔交易的记录</a>》</p> <p>《<a href="http://www.cnblogs.com/nokiaguy/archive/2008/05/24/1206469.html">MySQL查询的性能优化</a>》</p> <p>《<a href="http://www.cnblogs.com/tianqing/archive/2008/05/24/1206477.html">SQL Server2005探索之—— 利用SQL Server2005提供的namespace 编程</a>》</p> <p>《<a href="http://www.cnblogs.com/zhzkl/archive/2008/05/24/1206647.html">Report Definition Language(RDL) 轻型框架实现</a>》</p> <p>《<a href="http://www.cnblogs.com/datasky/archive/2008/05/26/1207325.html">无限级别的分类</a>》</p> <p>《<a href="http://www.cnblogs.com/yukaizhao/archive/2008/05/27/sql_server_2005_over_avg.html">sql server2005对t-sql的增强之在聚合函数的后面使用over关键字</a>》<br>19、软件工程（项目管理、项目流程分析、单元测试、需求分析、敏捷开发、SOA、UML）</p> <p>《<a href="http://www.cnblogs.com/guushuuse/archive/2008/05/20/1203278.html">Agile Software Development（敏捷软件开发）</a>》</p> <p>《<a href="http://www.cnblogs.com/sukyboor/archive/2008/05/19/1202377.html">慈善跟踪项目</a>》</p> <p>《<a href="http://www.cnblogs.com/netEagle/archive/2008/05/19/1202429.html">该封装到什么程度？</a>》</p> <p>《<a href="http://www.cnblogs.com/liguancong/archive/2008/05/23/1205708.html">Saas安全性问题讨论</a>》</p> <p>《<a href="http://www.cnblogs.com/yyliuliang/archive/2008/05/23/1205944.html">自己动手写个ORM 实现(1)</a>》</p> <p>《<a href="http://www.cnblogs.com/jyk/archive/2008/05/25/1206761.html">我写项目的步骤。抛砖引玉。</a>》</p> <p>《<a href="http://www.cnblogs.com/yyliuliang/archive/2008/05/26/1207320.html">自己动手写个ORM实现(2)</a>》</p> <p>《<a href="http://www.cnblogs.com/daizhj/archive/2008/05/26/1207866.html">你是否积极主动(Proactivity)?</a>》</p> <p>《<a href="http://www.cnblogs.com/caidehui/archive/2008/05/27/1208756.html">查询的条件和需要什么样的结果如何通知后台服务类的问题</a>》</p> <p>《<a href="http://www.cnblogs.com/cnblogsfans/archive/2008/05/28/1209047.html">项目经理虚拟管理客户</a>》</p> <p>《<a href="http://www.cnblogs.com/KingWorld/archive/2008/05/28/1209240.html">研发过程管理导图-第一稿</a>&nbsp;<a href="http://www.cnblogs.com/KingWorld/archive/2008/05/29/1210152.html">第二稿</a>》</p> <p>《<a href="http://www.cnblogs.com/westsourcer/archive/2008/05/28/EA.html">EA（Enterprise Architect）</a>》</p> <p>《<a href="http://www.cnblogs.com/benbenkoala/archive/2008/05/29/1209658.html">实战剖析三层架构</a>》<br>20、Web Service<br>21、WinForm(多线程、同步异步、序列化、反射、Remoting)</p> <p>《<a href="http://www.cnblogs.com/youzai/archive/2008/05/19/1202732.html">C# 实现屏幕键盘 (ScreenKeyboard)</a>》</p> <p>《<a href="http://www.cnblogs.com/eaglet/archive/2008/05/20/1203404.html">通过编程管理windows 防火墙</a>》</p> <p>《<a href="http://www.cnblogs.com/RongCha-040/archive/2008/05/22/1205206.html">C#(Win)Button实现下拉菜单</a>》</p> <p>《<a href="http://www.cnblogs.com/xdesigner/archive/2008/05/23/1205422.html">C#发现之旅第四讲 Windows图形开发入门</a>&nbsp;<a href="http://www.cnblogs.com/xdesigner/archive/2008/05/26/1207243.html">5</a>&nbsp;<a href="http://www.cnblogs.com/xdesigner/archive/2008/05/28/1208850.html">6</a>》</p> <p>《<a href="http://www.cnblogs.com/kingthy/archive/2008/05/24/1206457.html">开发基于UDP广播的小型局域网聊天室</a>》</p> <p>《<a href="http://www.cnblogs.com/xiaosonl/archive/2008/05/24/1206458.html">ASP.NET中使用反射将控件值与实体值相互映射</a>》</p> <p>《<a href="http://www.cnblogs.com/seek/archive/2008/05/25/1207145.html">[趣味编程]CPU占用率曲线听我指挥</a>》</p> <p>《<a href="http://www.cnblogs.com/1-2-3/archive/2008/05/26/colloquialism-thread-synchronization-part1.html">白话并发冲突与线程同步(1)</a>》<br>22、.NET、CLR</p> <p>《<a href="http://www.cnblogs.com/lbq1221119/archive/2008/05/19/1202533.html">(纪念国殇).Net Hosting:托管远程线程插入及非托管dll线程插入实现</a>》</p> <p>《<a href="http://www.cnblogs.com/TomCat007/archive/2008/05/19/1202845.html">.NET 上下文拦截(2)</a>》</p> <p>《<a href="http://www.cnblogs.com/zhuweisky/archive/2008/05/21/1203815.html">你知道 typeof(void) 吗？</a>》</p> <p>《<a href="http://www.cnblogs.com/henryfan/archive/2008/05/21/1204180.html">靠近IL用DynamicMethod简单实现方法</a>》</p> <p>《<a href="http://www.cnblogs.com/flyabroad/archive/2008/05/22/1205130.html">Microsoft Sync Framework 系列（五）：微软同步框架中的元数据（Metadata）</a>》</p> <p>《<a href="http://www.cnblogs.com/kevinShan/archive/2008/05/27/1208565.html">如何序列化Control等复杂类型对象</a>》<br>23、C#(2.0,、3.0)</p> <p>《<a href="http://www.cnblogs.com/netcasewqs/archive/2008/05/19/1202504.html">委托 - 事件 - 内存泄漏 - 弱引用 让人欢喜让人"忧"</a>》</p> <p>《<a href="http://www.cnblogs.com/Snowdreams/archive/2008/05/22/1205156.html">C# 3.0 扩展方法 实践</a>》</p> <p>《<a href="http://www.cnblogs.com/jyk/archive/2008/05/25/1206959.html">能自己“跑”的表单控件，思路，雏形，源码。vs2005版本</a>》</p> <p>《<a href="http://www.cnblogs.com/Kenny-Jiang/archive/2008/05/26/1207969.html">比较C#中的readonly与const</a>》<br>24、组件开发</p> <p>《<a href="http://www.cnblogs.com/wmj/archive/2008/05/19/1202840.html">Web基础控件开发--属性 [类型转换]</a>》</p> <p>《<a href="http://www.cnblogs.com/bqrm/archive/2008/05/20/1203366.html">Attribute应用，简化ANF自定义控件初始化过程</a>》</p> <p>《<a href="http://www.cnblogs.com/jeff377/archive/2008/05/21/1204305.html">扩展 CheckBoxField 类别 - 支持非布尔值的双向系结</a>》</p> <p>《<a href="http://www.cnblogs.com/jeff377/archive/2008/05/22/1205159.html">扩展 GridView 控件 - 无数据时显示标题列</a>》</p> <p>《<a href="http://www.cnblogs.com/bashan/archive/2008/05/23/1206084.html">Asp.NET大文件上传组件开发总结(五)---上传进度信息的显示</a>》</p> <p>《<a href="http://www.cnblogs.com/jeremyyang824/archive/2008/05/24/1206232.html">以横向树方式显示Html表格</a>》合适？</p> <p>《<a href="http://www.cnblogs.com/xpnew/archive/2008/05/24/1206247.html">[系列文章]上传文件管理控件之v1</a>&nbsp;<a href="http://www.cnblogs.com/xpnew/archive/2008/05/24/1206252.html">v2</a>》</p> <p>《<a href="http://www.cnblogs.com/jeff377/archive/2008/05/26/1207231.html">扩展 CheckBoxList 控件 - 系结复选项目</a>&nbsp;<a href="http://www.cnblogs.com/jeff377/archive/2008/05/27/1208108.html">2</a>》</p> <p>《<a href="http://www.cnblogs.com/Henllyee/archive/2008/05/27/1208518.html">asp.net 控件开发(三)------处理标签间内容</a>》</p> <p>《<a href="http://www.cnblogs.com/jyk/archive/2008/05/27/1208659.html">表单控件续（1）——应用接口来简化和分散代码</a>》</p> <p>《<a href="http://www.cnblogs.com/xpnew/archive/2008/05/28/1208816.html">[系列文章]上传文件管理控件v3</a>》</p> <p>《<a href="http://www.cnblogs.com/jyk/archive/2008/05/29/1210210.html">表单控件的副产品——查询控件</a>》</p> <p>《<a href="http://www.cnblogs.com/jeff377/archive/2008/05/29/1210300.html">GridView 自动编号字段 - TBSerialNumberField</a>》<br>25、开源项目</p> <p>《<a href="http://www.cnblogs.com/phinecos/archive/2008/05/19/1202823.html">基于Mozilla Thunderbird的扩展开发（五）---进程间通信之Socket篇（上）</a>&nbsp;<a href="http://www.cnblogs.com/phinecos/archive/2008/05/20/1203635.html">6</a>&nbsp;<a href="http://www.cnblogs.com/phinecos/archive/2008/05/21/1204341.html">7</a>&nbsp;<a href="http://www.cnblogs.com/phinecos/archive/2008/05/27/1208729.html">8</a>》</p> <p>《<a href="http://www.cnblogs.com/coderzh/archive/2008/05/20/1203574.html">开源Granados介绍 - SSH连接远程Linux服务器(C#)</a>》</p> <p>《<a href="http://www.cnblogs.com/bobmazelin/archive/2008/05/21/1204082.html">【PE】流程图对象以及事件驱动机制的介绍</a>》</p> <p>《<a href="http://www.cnblogs.com/sunwangji/archive/2008/05/23/1205991.html">DNN模块开发之利器篇:七种武器</a>》</p> <p>《<a href="http://www.cnblogs.com/shanyou/archive/2008/05/24/1206515.html">Gallio 自动化测试平台</a>》</p> <p>《<a href="http://www.cnblogs.com/kebixisimba/archive/2008/05/26/1207503.html">Unity(七)：使用场景Ⅲ：用于依赖注入（下）</a>》</p> <p>《<a href="http://www.cnblogs.com/lguyss/archive/2008/05/27/1208466.html">ABAP学习-第一章[开发环境和总体介绍]</a>&nbsp;<a href="http://www.cnblogs.com/lguyss/archive/2008/05/28/1208941.html">2 </a>》</p> <p>《<a href="http://www.cnblogs.com/zhuweisky/archive/2008/05/28/1208982.html">DataRabbit 轻量的ORM框架（16）－－ Entity缓存</a>》</p> <p>《<a href="http://www.cnblogs.com/xingzhixp/archive/2008/05/29/monorhel44.html">在RedHat Enterprise 4 上安装 Mono1.9 （四） </a>》</p> <p>26、算法数据结构</p> <p>《<a href="http://www.cnblogs.com/anderslly/archive/2008/05/19/factorial-algorithms.html">关于阶乘的两个常见算法及一个相关面试题</a>》</p> <p>《<a href="http://www.cnblogs.com/abatei/archive/2008/05/23/1205707.html">C#与数据结构--二叉树的遍历</a>》</p> <p>《<a href="http://www.cnblogs.com/helldog/archive/2008/05/27/1208281.html">表達式解析運算器（二）-- 算法實現</a>》</p> <p>《<a href="http://www.cnblogs.com/eaglet/archive/2008/05/27/1208423.html">KTDictSeg 分词组件1.3版本 部分算法讨论 -- 分词粒度</a>》</p> <p>《<a href="http://www.cnblogs.com/eaglet/archive/2008/05/28/1209256.html">KTDictSeg 分词组件1.3版本 部分算法讨论 -- 中文姓名识别和未登录词识别</a>》</p> <p>27、Office开发</p> <p>《<a href="http://www.cnblogs.com/qiangzi0303/archive/2008/05/19/1202421.html">.Net 中处理Word(2007)文档的一种方法</a>》</p> <p>《<a href="http://www.cnblogs.com/Bear-Study-Hard/archive/2008/05/20/1203633.html">通过代码解压出InfoPath模板文件xsn中的文件</a>》</p> <p>《<a href="http://www.cnblogs.com/salonliudong/archive/2008/05/23/1206180.html">[原]OWC做电子表格和图表的试验</a>》</p> <p>《<a href="http://www.cnblogs.com/montaque/archive/2008/05/24/1206258.html">Hello, Biztalk 2006 R2 BAM</a>》</p> <p>《<a href="http://www.cnblogs.com/wuhuacong/archive/2008/05/28/1209507.html">C#进行Visio二次开发之鸡毛蒜皮（一）</a>》</p> <p>28、Windows Mobile平台等嵌入式平台开发</p> <p>《<a href="http://www.cnblogs.com/aawolf/archive/2008/05/20/1203557.html">灾难环境下的Mobile应用构建及部署</a>》</p> <p>&nbsp;</p> <p><strong>注</strong>：有些分类我也觉得有些委屈求全，具体分类会在对大家的文章更多地全面的分析后再分。当前分类请参考<a href="http://www.cnblogs.com/lyj/archive/2008/05/18/1201878.html">《博客园精华集》技术分类目录草案</a>。真的很抱歉，看来文章种类真的很繁多，咂看上去这文章分类是很齐全了，但真正到用来分类的时候却发现有很多不足之处。希望各位网友和编委会成员都加以重视分类的问题。</p> <p>&nbsp;</p> <p align="right"><img src="http://www.cnblogs.com/images/cnblogs_com/volnet/85281/o_contact_v.jpg"></p><img src ="http://www.cnblogs.com/volnet/aggbug/1202929.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37547/" target="_blank">[新闻]遵守YouTube案裁定 谷歌将陷入隐私指控深渊</a>]]></description></item><item><title>【号召博客园网友以及所有爱心人士向四川汶川等重灾区捐款捐物】</title><link>http://www.cnblogs.com/volnet/archive/2008/05/13/love-anywhere.html</link><dc:creator>volnet（可以叫我大V）</dc:creator><author>volnet（可以叫我大V）</author><pubDate>Mon, 12 May 2008 19:11:00 GMT</pubDate><guid>http://www.cnblogs.com/volnet/archive/2008/05/13/love-anywhere.html</guid><wfw:comment>http://www.cnblogs.com/volnet/comments/1194315.html</wfw:comment><comments>http://www.cnblogs.com/volnet/archive/2008/05/13/love-anywhere.html#Feedback</comments><slash:comments>28</slash:comments><wfw:commentRss>http://www.cnblogs.com/volnet/comments/commentRss/1194315.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/volnet/services/trackbacks/1194315.html</trackback:ping><description><![CDATA[摘要: <img src="http://www.cnblogs.com/images/cnblogs_com/volnet/85281/o_love-anywhere.jpg" title="中国人，自己人救自己人，携手爱心捐助四川地震灾区"/>&nbsp;&nbsp;<a href='http://www.cnblogs.com/volnet/archive/2008/05/13/love-anywhere.html'>阅读全文</a><img src ="http://www.cnblogs.com/volnet/aggbug/1194315.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37546/" target="_blank">[新闻]iPhone入华在即 中国手机产业生存面临考验</a>]]></description></item><item><title>动态加载控件_常见问题解决之道</title><link>http://www.cnblogs.com/volnet/archive/2008/05/10/Solution-of-Dynamic-load-UserControl.html</link><dc:creator>volnet（可以叫我大V）</dc:creator><author>volnet（可以叫我大V）</author><pubDate>Fri, 09 May 2008 22:06:00 GMT</pubDate><guid>http://www.cnblogs.com/volnet/archive/2008/05/10/Solution-of-Dynamic-load-UserControl.html</guid><wfw:comment>http://www.cnblogs.com/volnet/comments/1190818.html</wfw:comment><comments>http://www.cnblogs.com/volnet/archive/2008/05/10/Solution-of-Dynamic-load-UserControl.html#Feedback</comments><slash:comments>16</slash:comments><wfw:commentRss>http://www.cnblogs.com/volnet/comments/commentRss/1190818.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/volnet/services/trackbacks/1190818.html</trackback:ping><description><![CDATA[<p>动态加载控件貌似给很多程序员都带来了困扰，经常收到这样的邮件，干脆就写下面这个示例来演示如何解决那些常见的问题吧。<br />
其实常见的问题通常有这样两个:<br />
1、通常他们都通过一个按钮来添加一个UserControl并将它们加入PlaceHolder容器的Controls中。然后页面上就会有一个另外一个按钮，这个按钮什么相关的事也没做，就是做了一次回发。这样的情况动态添加的控件就不翼而飞了。 </p>
<p>2、今天收到了一封邮件说是要追加控件，和上面的情况看上去好像不一样，但实质就是同一回事。 <br />
</p>
<p>原因： </p>
<p>其实网上有很多帖子都不约而同地解释了这个问题，这里我还是不厌其烦地解释一下：</p>
<p>首先，要提到大家所熟知很多人一知半解的页面生命周期，以至于很多居然还停留在将ASP.NET和Winform一样处理的层次上，因此就会有人试图将变量存在实例字段中，然后一如既往地指望它能够用来共享数据，结果总是无功而返，以我所知这样的人居然还不在少数，当然了，咱博客园的素质相对偏高，这种问题一般不在话下。事实上每次页面PostBack都会从Aspnet线程池中返回一个空闲的用户线程，用于处理用户本次的请求。摆弄一下那种浏览器进度条会动的控件基本也都算是回发事件了。两次回发之间可以当作没有什么关联的。但是你总能看到很多控件等在回发之后还能保持状态比如文本框边上有个按钮。你填写完了文本后狂点那个按钮，你会发现文本框中的文字还是你填写的那些而不会被清空。这就不得不说到ViewState这种神奇的双刃剑了。它的原理在MSDN上讲的很清楚，找不到的留言或发邮件给我我再慢慢给你找&#8230;&#8230;</p>
<p>然后呢？还是查MSDN,关键字&#8220;TemplateControl.LoadControl &#8221;我们在用PlaceHolder中动态添加控件的时候就会用到这个方法了。我们注意到这里有一句：&#8220;在将控件加载到容器控件时，该容器引发所添加控件的所有事件，直到所添加控件参与当前事件为止。但是，所添加控件不参与回发数据处理。&#8221;因为所添加的控件是不参与回发数据处理的，因此就会出现问题1中所遇到的按另一个按钮就消失的现象了。问题2其实也是一样的问题，因为事实上它们遇到的现象是一样的，只不过它的需求有所不同罢了。（可以理解成一个是i=1;另一个是i+=1;）<br />
</p>
<p><strong>综上所述，问题的关键就是原本在页面加载的时候所有的控件初始化操作都应该完成，动态加载将加载的过程延迟到了事件被触发之后，因此在页面回发后，因为会有一次新的页面加载过程，显然这时候动态加载的控件是不存在的，但是用户预期的答案是显示已经加载的信息。这时候如果可能我们最好在加载的过程中进行控件的重新加载和数据绑定。常见的方法中我们呢通常通过LoadControl来动态加载控件，因此只要在页面输出之前的所有事件节点上我们都可以加载我们的控件。但是推荐的则是Init事件。在Load事件的时候进行数据绑定。</strong><br />
<br />
解决：</p>
<p>既然问题的原因找到了，我们就应该解决它，现在关键就是在回发后PlaceHolder.Controls的子集数量为0，也就是没有子控件，也就是很明显地控件跑没了。那么我们就应该在我们在他们还在的时候将其存放起来。在经典的回发模型中，ViewState通过将所有控件/其子控件的各个属性字段等都存放到ViewState中了，在最后Render的时候都一并丢给了用户。数据包括数据状态都一并发到了客户端，现在客户点击了一个能够引起回发的按钮或者下拉框按钮，所有这些数据状态以及客户修改（也许没有修改，但我们假定客户篡改过了）的数据都传回客户端。因为回发发生了，因此在加载数据的阶段IPostBackEventHandler和IPostBackDataHandler接口所定义的方法（通常由服务器控件实现）都将被调用，然后就是一系列的数据回填工作。用户的数据又被重新做成了新的ViewState放在页面里面又丢给了客户端。我曾经用一个比喻（相当拙劣的比喻，当时好像不是这样比喻的）是白衬衫（花花公子正版）被蓝笔画后，送去洗衣店，人家新拿了一件一样的白衬衫（花花公子高仿），然后用蓝笔划了一下还给你，事实上白衬衫不是你原来的那件了，但看上去还是无法分辨。因此我们这里也可以用类似的办法来解决。但是真的可以吗？用ViewState不仅有众所周知的性能问题，因为ViewState的存储介质（其实是指它的内容存储，可以理解成持久层）是页面，而页面是指接受文本的一种载体（正如网页事实上都是文本一样的道理）因此会有序列化的问题。这就给用户控件的开发带来了极大的不便。更关键的原因是不仅如此，因为UserControl压根没有支持序列化，因此你的控件即使精简到没有字段方法（就声明了个名字够精简了吧）再加上序列化特性，只要你继承自UserControl，就必然面临无法序列化的尴尬。况且它的性能问题确实也很值得关注。和ViewState有类似性质的常见的还有Session和HttpContext.Current.Cache等缓存，或者自己实现一个静态字典用于存储也是一个不错的选择。用它们是可以解决问题的，在下面的代码中将会用到。但这样的方案事实上是存在很多问题的。大家都知道Session是有超时时间的，默认长度也就是几十分钟，而且Session也有诸多其他方面的限制，因此用它来做容量如此之大的控件存储其实是非常不适合的。HttpContext.Current.Cache是一个高级的缓存对象，因为有完善的内部机制来限制其膨胀以及管理其内容，但也正因为这种管理比如大小限制等原因会导致在生产环境中可能会遭遇严重的性能问题。缓存应该用来存取较小的常用的数据，比如用户名/密码这样的常用数据，而不是这种大个头的东西。但是与ViewState相似的性质让它们有了承担这份责任的义务。（家里的大人都死光了，孩子也只好来当家了）这让我们想到了存储介质，事实上磁盘文件，数据库等都具有了同样的性质。另一条思路是来自简单地加载思路，因为对动态添加的控件来说，它有一个很明显的特征，它是动态添加的。因此既然可以在按钮事件处理程序中添加，同样也就可以在页面初始化事件处理程序中添加。按照页面的生命周期动态添加最好写在Init这时候理应做丰富的添加（不过不适合那种需要用按钮添加的用户需求了）[另外一点有点郁闷的是在MSDN中也是说应该在Init而不是Load中动态添加，但是同样是在MSDN的《如何：以编程方式创建 ASP.NET 用户控件的实例》居然就用了Load事件来处理，因此这种区分对页面开发人员事实上并不是那么严谨的，事实上也不会出现什么问题，因此也就没有人吹毛求疵了，而且Google出来的答案估计90%以上都是在Load中写的，一传十十传百的结果可能这个数值还在上升，所以就更没必要计较了]。刚刚打算帮发邮件的兄弟直接找一个答案发现了有网友说在每个页面都要做判断搞加载，很烦很烦&#8230;&#8230;所以如果您的需求不是那种追求打开一个页面两天后再来点一下要追加或则重新加载控件的朋友，我的方案还是可以考虑的。当然如果你比较追求那种近乎变态的需求或者您的页面和淘宝有一样大的访问量的话，不凡试试我的方案，更好的解释是，我的方案可以当作理解控件动态加载原理解释的一个入口罢了。</p>
<p>我的例子，因为代码比较多，我就贴出如何调用的部分（也就是&#8220;如何用&#8221;的代码）源码可以在后面的链接中下载。</p>
<p>扩展性：虽然是为我那位邮友给出的答案，但是还是考虑了扩展性，我们可以尝试扩展用磁盘文件、网络、或者数据库的方式来作为存储介质，当然，您必须为此实现部分接口。局限性，因为有存储介质一说，因此不同容器托管方面不允许同时使用多种存储介质，否则将会出现两个集合，因此就带来了另一个扩展性，您可以自行实现扩展存储之间的数据同步，不过做此之前提醒您一下，不同的存储介质可能存在不同的存储能力，比如Session有大小限制，而数据库简直就是容量大王，这些数据之间的同步可能会引发新的问题，另者就是这样的同步除了看上去很酷之外并没有什么好处，将数据乱存的结果可能导致程序显得混乱，更尴尬的是数据同步所白白消耗掉的性能。当然如果您只是练练手的话您确实可以这么做，做完记得告诉我一下，哈哈，我也想不劳而获。哈哈。下面贴一下代码就不多做解释了，因为如果你理解了上面这些，看懂那些代码就不可能有问题了。</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; padding-left: 4px; font-size: 13px; border-top: #cccccc 1px solid; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">partial</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;_Default&nbsp;:&nbsp;System.Web.UI.Page<br />
<img id="Codehighlighter1_59_2319_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_59_2319_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_59_2319_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_59_2319_Closed_Text').style.display='inline';" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" /><img style="display: none" id="Codehighlighter1_59_2319_Closed_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_59_2319_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_59_2319_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_59_2319_Open_Text').style.display='inline';" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; display: none; background-color: #ffffff" id="Codehighlighter1_59_2319_Closed_Text"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_59_2319_Open_Text"><span style="color: #000000">{<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;ContainerManager.ContainerManager&nbsp;cm&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ContainerManager.ContainerManager();<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" /><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Page_Load(</span><span style="color: #0000ff">object</span><span style="color: #000000">&nbsp;sender,&nbsp;EventArgs&nbsp;e)<br />
<img id="Codehighlighter1_226_440_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_226_440_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_226_440_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_226_440_Closed_Text').style.display='inline';" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_226_440_Closed_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_226_440_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_226_440_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_226_440_Open_Text').style.display='inline';" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; display: none; background-color: #ffffff" id="Codehighlighter1_226_440_Closed_Text"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_226_440_Open_Text"><span style="color: #000000">{<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">重载控件(HttpContext.Current.Cache作为存储介质)</span><span style="color: #008000"><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cm.ReloadControls(HttpContext.Current.Cache,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">PlaceHolder_DynamicUserControlContainer</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;PlaceHolder_DynamicUserControlContainer.Controls);<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" /><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;btnInsertDynamicUserControl_Click(</span><span style="color: #0000ff">object</span><span style="color: #000000">&nbsp;sender,&nbsp;EventArgs&nbsp;e)<br />
<img id="Codehighlighter1_535_2125_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_535_2125_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_535_2125_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_535_2125_Closed_Text').style.display='inline';" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_535_2125_Closed_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_535_2125_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_535_2125_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_535_2125_Open_Text').style.display='inline';" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; display: none; background-color: #ffffff" id="Codehighlighter1_535_2125_Closed_Text"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_535_2125_Open_Text"><span style="color: #000000">{<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Control&nbsp;c1&nbsp;=&nbsp;LoadControl("DynamicUserControl.ascx");<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">PlaceHolder_DynamicUserControlContainer.Controls.Add(c1);</span><span style="color: #008000"><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" /></span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;displayCount;<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">.TryParse(txtNumber.Text,&nbsp;</span><span style="color: #0000ff">out</span><span style="color: #000000">&nbsp;displayCount);<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(displayCount&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)<br />
<img id="Codehighlighter1_814_1081_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_814_1081_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_814_1081_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_814_1081_Closed_Text').style.display='inline';" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_814_1081_Closed_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_814_1081_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_814_1081_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_814_1081_Open_Text').style.display='inline';" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; display: none; background-color: #ffffff" id="Codehighlighter1_814_1081_Closed_Text"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_814_1081_Open_Text"><span style="color: #000000">{<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">追加控件(Session作为存储介质)</span><span style="color: #008000"><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Control&nbsp;c1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;LoadControl(</span><span style="color: #800000">"</span><span style="color: #800000">DynamicUserControl.ascx</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cm.AppendControl(</span><span style="color: #0000ff">this</span><span style="color: #000000">.Session,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">PlaceHolder_DynamicUserControlContainer</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;PlaceHolder_DynamicUserControlContainer.Controls,&nbsp;c1);<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(displayCount&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000">)<br />
<img id="Codehighlighter1_1134_1655_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1134_1655_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1134_1655_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1134_1655_Closed_Text').style.display='inline';" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_1134_1655_Closed_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1134_1655_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1134_1655_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1134_1655_Open_Text').style.display='inline';" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; display: none; background-color: #ffffff" id="Codehighlighter1_1134_1655_Closed_Text"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1134_1655_Open_Text"><span style="color: #000000">{<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">追加控件(HttpContext.Current.Cache作为存储介质)</span><span style="color: #008000"><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Control&nbsp;c1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;LoadControl(</span><span style="color: #800000">"</span><span style="color: #800000">DynamicUserControl.ascx</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Control&nbsp;c2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;LoadControl(</span><span style="color: #800000">"</span><span style="color: #800000">WebUserControl.ascx</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cm.AppendControl(HttpContext.Current.Cache,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">PlaceHolder_DynamicUserControlContainer</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;PlaceHolder_DynamicUserControlContainer.Controls,&nbsp;c1);<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cm.AppendControl(HttpContext.Current.Cache,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">PlaceHolder_DynamicUserControlContainer</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;PlaceHolder_DynamicUserControlContainer.Controls,&nbsp;c2);<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br />
<img id="Codehighlighter1_1685_2115_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1685_2115_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1685_2115_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1685_2115_Closed_Text').style.display='inline';" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_1685_2115_Closed_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1685_2115_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1685_2115_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1685_2115_Open_Text').style.display='inline';" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; display: none; background-color: #ffffff" id="Codehighlighter1_1685_2115_Closed_Text"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1685_2115_Open_Text"><span style="color: #000000">{<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">常见的动态加载控件后点击其他回发事件就导致控件丢失</span><span style="color: #008000"><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PlaceHolder_DynamicUserControlContainer.Controls.Clear();<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Control&nbsp;c1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;LoadControl(</span><span style="color: #800000">"</span><span style="color: #800000">DynamicUserControl.ascx</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PlaceHolder_DynamicUserControlContainer.Controls.Add(c1);<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cm.CacheControls(HttpContext.Current.Cache,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">PlaceHolder_DynamicUserControlContainer</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;PlaceHolder_DynamicUserControlContainer.Controls);<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" /><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;btnUnloadStorage_Click(</span><span style="color: #0000ff">object</span><span style="color: #000000">&nbsp;sender,&nbsp;EventArgs&nbsp;e)<br />
<img id="Codehighlighter1_2209_2313_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2209_2313_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_2209_2313_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_2209_2313_Closed_Text').style.display='inline';" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_2209_2313_Closed_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2209_2313_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_2209_2313_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_2209_2313_Open_Text').style.display='inline';" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; display: none; background-color: #ffffff" id="Codehighlighter1_2209_2313_Closed_Text"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_2209_2313_Open_Text"><span style="color: #000000">{<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cm.Remove(HttpContext.Current.Cache,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">PlaceHolder_DynamicUserControlContainer</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span> </div>
源码地址：<a href="http://www.cnblogs.com/Files/volnet/WebAppPlaceHolder.zip">http://www.cnblogs.com/Files/volnet/WebAppPlaceHolder.zip</a> 
<img src ="http://www.cnblogs.com/volnet/aggbug/1190818.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37545/" target="_blank">[新闻]阿里巴巴集团再向淘宝注资20亿元</a>]]></description></item><item><title>【代码保留】WinForm ListBox上下移动选中项(扩展)</title><link>http://www.cnblogs.com/volnet/archive/2008/05/07/How-to-move-listbox-selected-items.html</link><dc:creator>volnet（可以叫我大V）</dc:creator><author>volnet（可以叫我大V）</author><pubDate>Wed, 07 May 2008 05:46:00 GMT</pubDate><guid>http://www.cnblogs.com/volnet/archive/2008/05/07/How-to-move-listbox-selected-items.html</guid><wfw:comment>http://www.cnblogs.com/volnet/comments/1186759.html</wfw:comment><comments>http://www.cnblogs.com/volnet/archive/2008/05/07/How-to-move-listbox-selected-items.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/volnet/comments/commentRss/1186759.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/volnet/services/trackbacks/1186759.html</trackback:ping><description><![CDATA[摘要: 一直都在做asp.net的东西，WinForm好久没碰过了，近乎陌生。今天同事说他的Winform中的ListBox无法上下移动项，让我感觉好奇怪，怎么可能，不就是交替选项么，换换位置应该就可以搞定。看了同事的代码，只觉得一片混沌，实在不忍心再读下去，就自己操刀写一下了。（下面的代码使用了扩展方法，需要编译器版本&gt;=3.0，也可以根据相关语法自行修改成2.0以下的版本）代码功能：比较简单，就&nbsp;&nbsp;<a href='http://www.cnblogs.com/volnet/archive/2008/05/07/How-to-move-listbox-selected-items.html'>阅读全文</a><img src ="http://www.cnblogs.com/volnet/aggbug/1186759.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37544/" target="_blank">[新闻]56被关一月 危机的是整个视频业</a>]]></description></item><item><title>看看属性被变异（编译）后的样子……</title><link>http://www.cnblogs.com/volnet/archive/2008/04/19/Look-into-the-property.html</link><dc:creator>volnet（可以叫我大V）</dc:creator><author>volnet（可以叫我大V）</author><pubDate>Sat, 19 Apr 2008 08:41:00 GMT</pubDate><guid>http://www.cnblogs.com/volnet/archive/2008/04/19/Look-into-the-property.html</guid><wfw:comment>http://www.cnblogs.com/volnet/comments/1161290.html</wfw:comment><comments>http://www.cnblogs.com/volnet/archive/2008/04/19/Look-into-the-property.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/volnet/comments/commentRss/1161290.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/volnet/services/trackbacks/1161290.html</trackback:ping><description><![CDATA[<p><strong>准备工作</strong></p> <p>其实没有什么准备工作，不过可以看看《<a href="http://www.cnblogs.com/volnet/archive/2008/04/19/How-to-add-ildasm-into-visualstudio.html">关于打开ILDASM的方法(2种)</a>》，或许对您有用。</p> <p>&nbsp;</p> <p><strong>前言</strong></p> <p>本来没有这个前言的，刚才自己看了标题，感觉有属性大全的味道，顺便改了标题，很可惜这里不讲那些你需要基础知识，那些知识您可以从<a href="http://www.microsoft.com/china/msdn" target="_blank">MSDN</a>获取。本文究竟讲些什么呢？本文其实没讲什么，就想看看属性被&#8220;编译&#8221;（变异）后的样子&#8230;&#8230;</p> <p>&nbsp;</p> <p><strong>关于属性</strong></p> <p><strong>get、set访问器</strong></p> <p>在使用了get、set访问器后，同类中不能够定义名称为get_[PropertyName]()与set_[PropertyName](TypeOfProperty value)这样的方法，否则将遭遇编译错误，如下图所示：</p> <p><a href="http://www.cnblogs.com/images/cnblogs_com/volnet/WindowsLiveWriter/8d1c34cb7a07_DDFF/image_8.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" border="0" alt="image" src="http://www.cnblogs.com/images/cnblogs_com/volnet/WindowsLiveWriter/8d1c34cb7a07_DDFF/image_thumb_3.png" width="689" height="428"></a> </p> <p>通过ILDASM工具查看后方可知道，get和set访问器会被编译器编译成依照上述规则而转换的公有方法供外部调用，这时我们若定义了相同签名的方法体将导致编译器的编译结果违背最基本的定义规则。</p> <p><a href="http://www.cnblogs.com/images/cnblogs_com/volnet/WindowsLiveWriter/8d1c34cb7a07_DDFF/image_6.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" border="0" alt="image" src="http://www.cnblogs.com/images/cnblogs_com/volnet/WindowsLiveWriter/8d1c34cb7a07_DDFF/image_thumb_2.png" width="291" height="171"></a>&nbsp;</p> <p><strong>自动实现的属性</strong></p> <p>众所周知在.NET 3.0的新版本中增加了自动实现的属性(automatically implemented property)语言特性。这将带来形如下面这样的属性声明方式：</p><pre style="font-family: consolas">        <span style="color: #0000ff">public</span> <span style="color: #0000ff">int</span> DotNet3Field1
        {
            <span style="color: #0000ff">get</span>;
            <span style="color: #0000ff">set</span>;
        }</pre>
<p>那么它将如何编译呢？同样用ILDASM查看：</p>
<p><a href="http://www.cnblogs.com/images/cnblogs_com/volnet/WindowsLiveWriter/8d1c34cb7a07_DDFF/image_12.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" border="0" alt="image" src="http://www.cnblogs.com/images/cnblogs_com/volnet/WindowsLiveWriter/8d1c34cb7a07_DDFF/image_thumb_5.png" width="310" height="180"></a> </p>
<p>在图中我们可以很容易看到它通过了'&lt;PropertyName&gt;k__BackingField'的方式进行了声明。关于自动实现的属性的限制，请参看《<a href="http://msdn2.microsoft.com/zh-cn/library/bb384054.aspx" target="_blank">自动实现的属性</a>》而这样的方式避免了之前编译错误的尴尬，因为由编译器生成的字段名不符合我们的语言规范。</p>
<p><strong>索引器</strong></p>
<p>为了说明问题以下仅依照索引器的定义规范实现索引器，但不保证索引器能够正常工作：</p><pre style="font-family: consolas">        <span style="color: #0000ff">public</span> <span style="color: #0000ff">int</span> <span style="color: #0000ff">this</span>[<span style="color: #0000ff">int</span> index]
        {
            <span style="color: #0000ff">get</span> {
                <span style="color: #0000ff">return</span> 0;
            }
            <span style="color: #0000ff">set</span> {
            }
        }</pre>
<p><a href="http://www.cnblogs.com/images/cnblogs_com/volnet/WindowsLiveWriter/8d1c34cb7a07_DDFF/image_14.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" border="0" alt="image" src="http://www.cnblogs.com/images/cnblogs_com/volnet/WindowsLiveWriter/8d1c34cb7a07_DDFF/image_thumb_6.png" width="797" height="244"></a> </p>
<p>仔细对比就可以看见多了</p>
<p>.custom instance void [mscorlib]System.Reflection.DefaultMemberAttribute::.ctor(string) = (01 00 04 49 74 65 6D 00 00)</p>
<p>get_Item : int32(int32)</p>
<p>set_Item : void(int32,int32)</p>
<p>Item : instance int32(int32)</p>
<p>以下分别是get_Item和set_Item的IL代码</p><pre style="font-family: consolas">.method <span style="color: #0000ff">public</span> hidebysig specialname instance <span style="color: #0000ff">int</span>32 
        get_Item(<span style="color: #0000ff">int</span>32 index) cil managed
{
  <span style="color: #008000">// 代码大小       7 (0x7)</span>
  .maxstack  1
  .locals init ([0] <span style="color: #0000ff">int</span>32 CS$1$0000)
  IL_0000:  nop
  IL_0001:  ldc.i4.0
  IL_0002:  stloc.0
  IL_0003:  br.s       IL_0005
  IL_0005:  ldloc.0
  IL_0006:  ret
} <span style="color: #008000">// end of method BaseClass::get_Item</span>

.method <span style="color: #0000ff">public</span> hidebysig specialname instance <span style="color: #0000ff">void</span> 
        set_Item(<span style="color: #0000ff">int</span>32 index,
                 <span style="color: #0000ff">int</span>32 '<span style="color: #0000ff">value</span>') cil managed
{
  <span style="color: #008000">// 代码大小       2 (0x2)</span>
  .maxstack  8
  IL_0000:  nop
  IL_0001:  ret
} <span style="color: #008000">// end of method BaseClass::set_Item</span></pre><pre style="font-family: consolas">因此其实索引器与属性之间的唯一差别仅在于参数的个数上，当然外部表现还有那个中括号。</pre> <img src ="http://www.cnblogs.com/volnet/aggbug/1161290.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37543/" target="_blank">[新闻]李开复：中文搜索是谷歌战略核心</a>]]></description></item><item><title>关于打开ILDASM的方法(2种)</title><link>http://www.cnblogs.com/volnet/archive/2008/04/19/How-to-add-ildasm-into-visualstudio.html</link><dc:creator>volnet（可以叫我大V）</dc:creator><author>volnet（可以叫我大V）</author><pubDate>Sat, 19 Apr 2008 08:18:00 GMT</pubDate><guid>http://www.cnblogs.com/volnet/archive/2008/04/19/How-to-add-ildasm-into-visualstudio.html</guid><wfw:comment>http://www.cnblogs.com/volnet/comments/1161273.html</wfw:comment><comments>http://www.cnblogs.com/volnet/archive/2008/04/19/How-to-add-ildasm-into-visualstudio.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/volnet/comments/commentRss/1161273.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/volnet/services/trackbacks/1161273.html</trackback:ping><description><![CDATA[<p>关于打开ILDASM的方法(2种)(推荐方法2)：</p> <p>1、通过VisualStudio在开始菜单下的Microsoft Visual Studio 2008\Visual Studio Tools\中的命令提示符中输入ildasm即可</p> <p>2、将其添加至Visual Studio的外部工具中。获取它地址的方法简要描述为：先通过方法1启动ildasm，打开任务管理器，在进程中找到ildasm，右键选择调试，用VisualStudio或其他开发工具打开，通过属性可获得该工具的本地磁盘位置。我机器上它存在于C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\ILDASM.EXE，若您机器上它不是位于这个位置，按我的方式即可找到它，复制这个地址，并打开VisualStudio，在&#8220;工具&#8221;中找到&#8220;外部工具&#8221;，点击&#8220;添加&#8221;，填写相应信息即可。关于参数一栏可以参考<a title="http://msdn2.microsoft.com/zh-cn/library/f7dy01k1(VS.80).aspx" href="http://msdn2.microsoft.com/zh-cn/library/f7dy01k1(VS.80).aspx">http://msdn2.microsoft.com/zh-cn/library/f7dy01k1(VS.80).aspx</a>中的相关说明。我这里添加了最基本的参数filename，将其添加到参数一栏即可：$(ProjectDir)bin\Debug\$(TargetName)$(TargetExt)</p> <p><a href="http://www.cnblogs.com/images/cnblogs_com/volnet/WindowsLiveWriter/ILDASM2_E52D/image_thumb%5B9%5D_2.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" border="0" alt="image_thumb[9]" src="http://www.cnblogs.com/images/cnblogs_com/volnet/WindowsLiveWriter/ILDASM2_E52D/image_thumb%5B9%5D_thumb.png" width="405" height="378"></a></p>  <img src ="http://www.cnblogs.com/volnet/aggbug/1161273.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37543/" target="_blank">[新闻]李开复：中文搜索是谷歌战略核心</a>]]></description></item><item><title>【代码保留】IE8中如何添加Activity</title><link>http://www.cnblogs.com/volnet/archive/2008/04/08/How-to-add-activities-for-ie8.html</link><dc:creator>volnet（可以叫我大V）</dc:creator><author>volnet（可以叫我大V）</author><pubDate>Mon, 07 Apr 2008 16:48:00 GMT</pubDate><guid>http://www.cnblogs.com/volnet/archive/2008/04/08/How-to-add-activities-for-ie8.html</guid><wfw:comment>http://www.cnblogs.com/volnet/comments/1141237.html</wfw:comment><comments>http://www.cnblogs.com/volnet/archive/2008/04/08/How-to-add-activities-for-ie8.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cnblogs.com/volnet/comments/commentRss/1141237.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/volnet/services/trackbacks/1141237.html</trackback:ping><description><![CDATA[ <style type="text/css" rel="stylesheet">
.codestyle{background-color:#eefeef;border:1px;padding-right:20px;padding-left:20px;}
.lightup{background-color:yellow;}
hr{color: #c0c0c0;margin: 0em 1.5em 1em 1.5em;height: 1px;}
</style>  <div> <script type="text/javascript">
function addActivity(xml){
    try
    {
        window.external.addService(xml);
    }
    catch(e)
    {
        //alert(e.toString());
        alert('请首先安装IE8');
    }
}
</script> 试试下面这个功能吧：（选中之后是利用“博客园”的博问搜索进行搜索……） </div> <div><input onclick="addActivity('http://www.cnblogs.com/Files/volnet/cnblogsactivity.xml');" value="将博客园添加到IE8的活动中" type="button"> </div><pre style="font-family: consolas">IE8中添加Activity的JavaScript脚本（这是一个来自淘宝网的例子）（<strong>本文最后脚本有做修改</strong>）</pre>
<div class="codestyle"><pre style="font-family: consolas">&lt;script type="<span style="color: #8b0000">text/javascript</span>"&gt;
    <span style="color: #0000ff">function</span> addActivity() {
    <span style="color: #0000ff">if</span> (navigator.userAgent.indexOf('MSIE 8') == -1) {
        <span style="color: #0000ff">alert</span>('请首先安装IE8.');
    } <span style="color: #0000ff">else</span> {
        <span style="color: #0000ff">window</span>.external.addService('activities/taobao-search.xml');
    }
}
&lt;/script&gt;</pre></div><pre style="font-family: consolas">相关XML描述文件：<a title="http://ie8.taobao.com/activities/taobao-search.xml" href="http://ie8.taobao.com/activities/taobao-search.xml">http://ie8.taobao.com/activities/taobao-search.xml</a></pre>
<div class="codestyle"><pre style="font-family: consolas"><span style="color: #0000ff">&lt;?</span>xml version="1.0" encoding="UTF-8" <span style="color: #0000ff">?&gt;</span>
<span style="color: #0000ff">&lt;</span><span style="color: #800000">openServiceDescription</span> <span style="color: #ff0000">xmlns</span>=<span style="color: #0000ff">"http://www.microsoft.com/schemas/openservicedescription/1.0"</span><span style="color: #0000ff">&gt;</span>
  <span style="color: #0000ff">&lt;</span><span style="color: #800000">homepageUrl</span><span style="color: #0000ff">&gt;</span>http://www.taobao.com<span style="color: #0000ff">&lt;/</span><span style="color: #800000">homepageUrl</span><span style="color: #0000ff">&gt;</span>
  <span style="color: #0000ff">&lt;</span><span style="color: #800000">display</span><span style="color: #0000ff">&gt;</span>
    <span style="color: #0000ff">&lt;</span><span style="color: #800000">name</span><span style="color: #0000ff">&gt;</span>淘宝搜索<span style="color: #0000ff">&lt;/</span><span style="color: #800000">name</span><span style="color: #0000ff">&gt;</span>
    <span style="color: #0000ff">&lt;</span><span style="color: #800000">icon</span><span style="color: #0000ff">&gt;</span>http://www.taobao.com/favicon.ico<span style="color: #0000ff">&lt;/</span><span style="color: #800000">icon</span><span style="color: #0000ff">&gt;</span>
  <span style="color: #0000ff">&lt;/</span><span style="color: #800000">display</span><span style="color: #0000ff">&gt;</span>
  <span style="color: #0000ff">&lt;</span><span style="color: #800000">activity</span> <span style="color: #ff0000">category</span>=<span style="color: #0000ff">"Find"</span><span style="color: #0000ff">&gt;</span>
    <span style="color: #0000ff">&lt;</span><span style="color: #800000">activityAction</span> <span style="color: #ff0000">context</span>=<span style="color: #0000ff">"selection"</span><span style="color: #0000ff">&gt;</span>
      <span style="color: #0000ff">&lt;</span><span style="color: #800000">preview</span> <span style="color: #ff0000">action</span>=<span style="color: #0000ff">"http://ie8.taobao.com/activities/preview.php?query={selection}"</span> <span style="color: #0000ff">/&gt;</span>
      <span style="color: #0000ff">&lt;</span><span style="color: #800000">execute</span> <span style="color: #ff0000">method</span>=<span style="color: #0000ff">"get"</span> <span style="color: #ff0000">action</span>=<span style="color: #0000ff">"http://ie8.taobao.com/list.php?query={selection}"</span> <span style="color: #0000ff">/&gt;</span>
    <span style="color: #0000ff">&lt;/</span><span style="color: #800000">activityAction</span><span style="color: #0000ff">&gt;</span>
  <span style="color: #0000ff">&lt;/</span><span style="color: #800000">activity</span><span style="color: #0000ff">&gt;</span>
<span style="color: #0000ff">&lt;/</span><span style="color: #800000">openServiceDescription</span><span style="color: #0000ff">&gt;</span></pre></div>
<div>更多细节请查看<a title="whitepaper" href="http://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=ie8whitepapers&amp;ReleaseId=566">活动白皮书</a>。</div>
<div>写了一个简单的Google搜索的Activity XML：</div>
<div class="codestyle"><pre style="font-family: consolas"><span style="color: #0000ff">&lt;?</span>xml version="1.0" encoding="UTF-8" <span style="color: #0000ff">?&gt;</span>
 <span style="color: #0000ff">&lt;</span><span style="color: #800000">openServiceDescription</span> <span style="color: #ff0000">xmlns</span>=<span style="color: #0000ff">"http://www.microsoft.com/schemas/openservicedescription/1.0"</span><span style="color: #0000ff">&gt;</span>
  <span style="color: #0000ff">&lt;</span><span style="color: #800000">homepageUrl</span><span style="color: #0000ff">&gt;</span>http://www.google.com<span style="color: #0000ff">&lt;/</span><span style="color: #800000">homepageUrl</span><span style="color: #0000ff">&gt;</span>
 <span style="color: #0000ff">&lt;</span><span style="color: #800000">display</span><span style="color: #0000ff">&gt;</span>
    <span style="color: #0000ff">&lt;</span><span style="color: #800000">name</span><span style="color: #0000ff">&gt;</span>Google Search<span style="color: #0000ff">&lt;/</span><span style="color: #800000">name</span><span style="color: #0000ff">&gt;</span>
   <span style="color: #0000ff">&lt;</span><span style="color: #800000">icon</span><span style="color: #0000ff">&gt;</span>http://www.google.com/favicon.ico<span style="color: #0000ff">&lt;/</span><span style="color: #800000">icon</span><span style="color: #0000ff">&gt;</span>
  <span style="color: #0000ff">&lt;/</span><span style="color: #800000">display</span><span style="color: #0000ff">&gt;</span>
   <span style="color: #0000ff">&lt;</span><span style="color: #800000">activity</span> <span style="color: #ff0000">category</span>=<span style="color: #0000ff">"Find"</span><span style="color: #0000ff">&gt;</span>
    - <span style="color: #0000ff">&lt;</span><span style="color: #800000">activityAction</span> <span style="color: #ff0000">context</span>=<span style="color: #0000ff">"selection"</span><span style="color: #0000ff">&gt;</span>
      <span style="color: #0000ff">&lt;</span><span style="color: #800000">preview</span> <span style="color: #ff0000">action</span>=<span style="color: #0000ff">"http://www.google.com/search?q={selection}"</span> <span style="color: #0000ff">/&gt;</span>
      <span style="color: #0000ff">&lt;</span><span style="color: #800000">execute</span> <span style="color: #ff0000">method</span>=<span style="color: #0000ff">"get"</span> <span style="color: #ff0000">action</span>=<span style="color: #0000ff">"http://www.google.com/search?q={selection}"</span> <span style="color: #0000ff">/&gt;</span>
    <span style="color: #0000ff">&lt;/</span><span style="color: #800000">activityAction</span><span style="color: #0000ff">&gt;</span>
  <span style="color: #0000ff">&lt;/</span><span style="color: #800000">activity</span><span style="color: #0000ff">&gt;</span>
<span style="color: #0000ff">&lt;/</span><span style="color: #800000">openServiceDescription</span><span style="color: #0000ff">&gt;</span></pre></div>
<div>其中有句用于描述homepageUrl节点的说明：The main URL of the Activity where the user can access the service through browsing. <strong>All URLs expressed in this format must match the domain of the homepageUrl</strong>.也就是后续的所有的URLs都必须与主页Url在相同的域中。比如上例中就必须都是google.com域中。</div>
<p>&nbsp;</p>
<hr>

<p>openServiceDescription是专门用于Activity的xml节点名。</p>
<hr>

<p>形如selection的位置，若在尾部加“?”则表示若该标记为空，将以空格代替。如：</p>
<p>&lt;execute method="get" action="http://example.com/done.aspx?url={<span class="lightup">documentUrl</span>}&amp;title={<span class="lightup">documentTitle?</span>}" /&gt; </p>
<p>其中documentUrl是必选项，而documentTitle因为带了“?”，所以是可选项。</p>
<hr>

<p>另外以下几种简单的标记在“预览”窗体中是不会有效的。</p>
<div class="codestyle">
<p>· &lt;select&gt; <br>· &lt;input type="text"&gt; <br>· &lt;text area&gt; </p></div>
<hr>

<p>关于脚本：</p>
<div class="codestyle"><pre style="font-family: consolas"><span style="color: rgb(0,128,0)">//JavaScript API for Activities</span>
<span style="color: rgb(0,128,0)">//检查服务是否已经安装了</span>
<span style="color: rgb(0,128,0)">//参数：Service XML，name</span>
<span style="color: rgb(0,0,255)">window</span>.external.IsServiceInstalled("<span style="color: rgb(139,0,0)">http://maps.live.com/GetMap.xml</span>", "<span style="color: rgb(139,0,0)">map</span>"); <br>
<span style="color: rgb(0,128,0)">//添加服务</span>
<span style="color: rgb(0,128,0)">//参数：Service XML</span>
<span style="color: rgb(0,0,255)">window</span>.external.AddService("<span style="color: rgb(139,0,0)">http://maps.live.com/GetMap.xml</span>"); </pre></div>
<hr>

<p>下面是白皮书中所给出的示例，相对元素更齐全一些：</p>
<div class="codestyle"><pre style="font-family: consolas"><span style="color: #0000ff">&lt;?</span>xml version="1.0" encoding="UTF-8"<span style="color: #0000ff">?&gt;</span>
<span style="color: #0000ff">&lt;</span><span style="color: #800000">openServiceDescription</span>
   <span style="color: #ff0000">xmlns</span>=<span style="color: #0000ff">"http://www.microsoft.com/schemas/openservicedescription/1.0"</span><span style="color: #0000ff">&gt;</span>
  <span style="color: #0000ff">&lt;</span><span style="color: #800000">homepageUrl</span><span style="color: #0000ff">&gt;</span>http://maps.live.com<span style="color: #0000ff">&lt;/</span><span style="color: #800000">homepageUrl</span><span style="color: #0000ff">&gt;</span>
  <span style="color: #0000ff">&lt;</span><span style="color: #800000">display</span><span style="color: #0000ff">&gt;</span>
    <span style="color: #0000ff">&lt;</span><span style="color: #800000">name</span><span style="color: #0000ff">&gt;</span>Map with Live Maps<span style="color: #0000ff">&lt;/</span><span style="color: #800000">name</span><span style="color: #0000ff">&gt;</span>
    <span style="color: #0000ff">&lt;</span><span style="color: #800000">icon</span><span style="color: #0000ff">&gt;</span>http://www.live.com/favicon.ico<span style="color: #0000ff">&lt;/</span><span style="color: #800000">icon</span><span style="color: #0000ff">&gt;</span>
  <span style="color: #0000ff">&lt;/</span><span style="color: #800000">display</span><span style="color: #0000ff">&gt;</span>
  <span style="color: #0000ff">&lt;</span><span style="color: #800000">activity</span> <span style="color: #ff0000">category</span>=<span style="color: #0000ff">"map"</span><span style="color: #0000ff">&gt;</span>
    <span style="color: #0000ff">&lt;</span><span style="color: #800000">activityAction</span> <span style="color: #ff0000">context</span>=<span style="color: #0000ff">"selection"</span> <span style="color: #0000ff">&gt;</span>
      <span style="color: #0000ff">&lt;</span><span style="color: #800000">preview</span> <span style="color: #ff0000">action</span>=<span style="color: #0000ff">" http://maps.live.com/geotager.aspx"</span><span style="color: #0000ff">&gt;</span>
        <span style="color: #0000ff">&lt;</span><span style="color: #800000">parameter</span> <span style="color: #ff0000">name</span>=<span style="color: #0000ff">"b"</span> <span style="color: #ff0000">value</span>=<span style="color: #0000ff">"{selection}"</span> <span style="color: #0000ff">/&gt;</span>
        <span style="color: #0000ff">&lt;</span><span style="color: #800000">parameter</span> <span style="color: #ff0000">name</span>=<span style="color: #0000ff">"clean"</span> <span style="color: #ff0000">value</span>=<span style="color: #0000ff">"true"</span> <span style="color: #0000ff">/&gt;</span>
        <span style="color: #0000ff">&lt;</span><span style="color: #800000">parameter</span> <span style="color: #ff0000">name</span>=<span style="color: #0000ff">"w"</span> <span style="color: #ff0000">value</span>=<span style="color: #0000ff">"320"</span> <span style="color: #0000ff">/&gt;</span>
        <span style="color: #0000ff">&lt;</span><span style="color: #800000">parameter</span> <span style="color: #ff0000">name</span>=<span style="color: #0000ff">"h"</span> <span style="color: #ff0000">value</span>=<span style="color: #0000ff">"240"</span> <span style="color: #0000ff">/&gt;</span>
        <span style="color: #0000ff">&lt;</span><span style="color: #800000">parameter</span> <span style="color: #ff0000">name</span>=<span style="color: #0000ff">"format"</span> <span style="color: #ff0000">value</span>=<span style="color: #0000ff">"full"</span> <span style="color: #0000ff">/&gt;</span>
      <span style="color: #0000ff">&lt;/</span><span style="color: #800000">preview</span><span style="color: #0000ff">&gt;</span>
      <span style="color: #0000ff">&lt;</span><span style="color: #800000">execute</span> <span style="color: #ff0000">action</span>=<span style="color: #0000ff">" http://maps.live.com/default.aspx"</span><span style="color: #0000ff">&gt;</span>
        <span style="color: #0000ff">&lt;</span><span style="color: #800000">parameter</span> <span style="color: #ff0000">name</span>=<span style="color: #0000ff">"where1"</span> <span style="color: #ff0000">value</span>=<span style="color: #0000ff">"{selection}"</span> <span style="color: #ff0000">type</span>=<span style="color: #0000ff">"text"</span> <span style="color: #0000ff">/&gt;</span>
      <span style="color: #0000ff">&lt;/</span><span style="color: #800000">execute</span><span style="color: #0000ff">&gt;</span>
    <span style="color: #0000ff">&lt;/</span><span style="color: #800000">activityAction</span><span style="color: #0000ff">&gt;</span>
  <span style="color: #0000ff">&lt;/</span><span style="color: #800000">activity</span><span style="color: #0000ff">&gt;</span>
<span style="color: #0000ff">&lt;/</span><span style="color: #800000">openServiceDescription</span><span style="color: #0000ff">&gt;</span></pre></div>
<div>试试下面这个功能吧：（选中之后是利用“博客园”的博问搜索进行搜索……） </div>
<div><input onclick="addActivity('http://www.cnblogs.com/Files/volnet/cnblogsactivity.xml');" value="将博客园添加到IE8的活动中" type="button"> </div>
<p>下面是上面这个按钮的代码：</p>
<div class="codestyle"><pre style="font-family: consolas">&lt;div&gt;
&lt;script type="<span style="color: #8b0000">text/javascript</span>"&gt;
<span style="color: #0000ff">function</span> addActivity(xml) {
	<span style="color: #0000ff">if</span> (navigator.userAgent.indexOf('MSIE 8') == -1) {
		<span style="color: #0000ff">alert</span>('请首先安装IE8.');
	} <span style="color: #0000ff">else</span> {
		<span style="color: #0000ff">window</span>.external.addService(xml);
	}
}
&lt;/script&gt;
试试下面这个功能吧：（选中之后是利用“博客园”的博问搜索进行搜索……） &lt;/div&gt;
&lt;div&gt;&lt;input onclick="<span style="color: #8b0000">addActivity('http://www.cnblogs.com/Files/volnet/cnblogsactivity.xml');</span>" value="<span style="color: #8b0000">将博客园添加到IE8的活动中</span>" type="<span style="color: #8b0000">button</span>"&gt; &lt;/div&gt;</pre><pre style="font-family: consolas"><span style="color: #0000ff">&lt;?</span>xml version="1.0" encoding="UTF-8" <span style="color: #0000ff">?&gt;</span>
<span style="color: #0000ff">&lt;</span><span style="color: #800000">openServiceDescription</span> <span style="color: #ff0000">xmlns</span>=<span style="color: #0000ff">"http://www.microsoft.com/schemas/openservicedescription/1.0"</span><span style="color: #0000ff">&gt;</span>
  <span style="color: #0000ff">&lt;</span><span style="color: #800000">homepageUrl</span><span style="color: #0000ff">&gt;</span>http://www.cnblogs.com<span style="color: #0000ff">&lt;/</span><span style="color: #800000">homepageUrl</span><span style="color: #0000ff">&gt;</span>
  <span style="color: #0000ff">&lt;</span><span style="color: #800000">display</span><span style="color: #0000ff">&gt;</span>
    <span style="color: #0000ff">&lt;</span><span style="color: #800000">name</span><span style="color: #0000ff">&gt;</span>博客园<span style="color: #0000ff">&lt;/</span><span style="color: #800000">name</span><span style="color: #0000ff">&gt;</span>
    <span style="color: #0000ff">&lt;</span><span style="color: #800000">icon</span><span style="color: #0000ff">&gt;</span>http://www.cnblogs.com/favicon.ico<span style="color: #0000ff">&lt;/</span><span style="color: #800000">icon</span><span style="color: #0000ff">&gt;</span>
  <span style="color: #0000ff">&lt;/</span><span style="color: #800000">display</span><span style="color: #0000ff">&gt;</span>
  <span style="color: #0000ff">&lt;</span><span style="color: #800000">activity</span> <span style="color: #ff0000">category</span>=<span style="color: #0000ff">"Blog"</span><span style="color: #0000ff">&gt;</span>
    - <span style="color: #0000ff">&lt;</span><span style="color: #800000">activityAction</span> <span style="color: #ff0000">context</span>=<span style="color: #0000ff">"selection"</span><span style="color: #0000ff">&gt;</span>
      <span style="color: #0000ff">&lt;</span><span style="color: #800000">preview</span> <span style="color: #ff0000">action</span>=<span style="color: #0000ff">"http://space.cnblogs.com/search/q?all={selection}"</span> <span style="color: #0000ff">/&gt;</span>
      <span style="color: #0000ff">&lt;</span><span style="color: #800000">execute</span> <span style="color: #ff0000">method</span>=<span style="color: #0000ff">"get"</span> <span style="color: #ff0000">action</span>=<span style="color: #0000ff">"http://www.cnblogs.com/"</span> <span style="color: #0000ff">/&gt;</span>
    <span style="color: #0000ff">&lt;/</span><span style="color: #800000">activityAction</span><span style="color: #0000ff">&gt;</span>
  <span style="color: #0000ff">&lt;/</span><span style="color: #800000">activity</span><span style="color: #0000ff">&gt;</span>
<span style="color: #0000ff">&lt;/</span><span style="color: #800000">openServiceDescription</span><span style="color: #0000ff">&gt;</span></pre></div>
<div>添加后若不喜欢，可以在IE8的“管理活动”中进行移除。</div>
<p>因为IE8为了做兼容IE7以及过去的网页，添加了一个“模仿IE7（Emulate IE7）”的按钮，这导致了当使用了该按钮的网页在使用以上所述的脚本的时候，navigator.userAgent的值显示的是IE7内核的相关代码，因此我们的判断可能会不准确，但是Activity功能事实上并不依赖于IE内核而存在，也就是如果你用的是IE8但你仅仅只是使用了模仿IE7的功能，那么你实质上还是可以使用Activity功能的。因此上面一直使用的脚本可以修改为下面的样子，以兼容这种特殊的伪装行为。</p>
<div class="codestyle"><pre style="font-family: consolas"><span style="color: #0000ff">function</span> addActivity(xml){
    <span style="color: #0000ff">try</span>
    {
        <span style="color: #0000ff">window</span>.external.addService(xml);
    }
    <span style="color: #0000ff">catch</span>(e)
    {
        <span style="color: #008000">//alert(e.toString());</span>
        <span style="color: #0000ff">alert</span>('请首先安装IE8');
    }
}</pre></div>
<p>于此同时我也记录下了navigator.userAgent在常见浏览器中的一些值，以让大家更好地了解之前所使用的脚本所进行的内部工作。</p>
<div class="codestyle"><pre style="font-family: consolas"><span style="color: #008000">//IE7(或IE8中使用了兼容IE7模式)</span>
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 1.1.4322)

<span style="color: #008000">//IE8</span>
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 1.1.4322)

<span style="color: #008000">//Firefox/2.0.0.13</span>
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13

<span style="color: #008000">//Safari3</span>
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15(KHTML,like Gecko) Version/3.0 Safari/523.15</pre></div><img src ="http://www.cnblogs.com/volnet/aggbug/1141237.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37542/" target="_blank">[新闻]《星际争霸2》新图：黑暗圣堂武士Zeratul</a>]]></description></item><item><title>初试Deep Zoom Composer（Step by Step|More Pictures）（超酷+必试）</title><link>http://www.cnblogs.com/volnet/archive/2008/04/07/Trying-Deep-Zoom-Composer.html</link><dc:creator>volnet（可以叫我大V）</dc:creator><author>volnet（可以叫我大V）</author><pubDate>Sun, 06 Apr 2008 20:05:00 GMT</pubDate><guid>http://www.cnblogs.com/volnet/archive/2008/04/07/Trying-Deep-Zoom-Composer.html</guid><wfw:comment>http://www.cnblogs.com/volnet/comments/1139708.html</wfw:comment><comments>http://www.cnblogs.com/volnet/archive/2008/04/07/Trying-Deep-Zoom-Composer.html#Feedback</comments><slash:comments>15</slash:comments><wfw:commentRss>http://www.cnblogs.com/volnet/comments/commentRss/1139708.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/volnet/services/trackbacks/1139708.html</trackback:ping><description><![CDATA[<p><a href="http://www.cnblogs.com/images/cnblogs_com/volnet/WindowsLiveWriter/DeepZoomComposerStepbyStepMorePictures_3932/8_StaticEffect_2.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" border="0" alt="10_FinalEffect" src="http://www.cnblogs.com/images/cnblogs_com/volnet/WindowsLiveWriter/DeepZoomComposerStepbyStepMorePictures_3932/8_StaticEffect_thumb.jpg" width="644" height="444"></a> </p> <p>今天看到周兄的<a href="http://www.cnblogs.com/zhouyinhui/archive/2008/04/06/1139059.html">【全面解析DeepZoom 之一】酷！Deep Zoom</a>的介绍，觉得实在是酷，就开始动手做了一下，做的不好，凑合着看吧。周兄是给大家全面解析，我只是做着玩的，所以叫做简单示范……</p> <p><strong>准备</strong></p> <p>1.Visual Studio 2008</p> <p>2.Deep Zoom Composer(<a title="http://blogs.msdn.com/expression/archive/2008/03/05/download-the-preview-of-the-deep-zoom-composer.aspx" href="http://blogs.msdn.com/expression/archive/2008/03/05/download-the-preview-of-the-deep-zoom-composer.aspx">http://blogs.msdn.com/expression/archive/2008/03/05/download-the-preview-of-the-deep-zoom-composer.aspx</a>)</p> <p>3.Silverlight beta2</p> <p>4.图片若干</p> <p><strong>步骤</strong></p> <p>1.打开Deep Zoom Composer，新建Project，Import图片，图片将如图显示在Deep Zoom Composer的右侧</p> <p><a href="http://www.cnblogs.com/images/cnblogs_com/volnet/WindowsLiveWriter/DeepZoomComposerStepbyStepMorePictures_3932/1_Import_2.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" border="0" alt="1_Import" src="http://www.cnblogs.com/images/cnblogs_com/volnet/WindowsLiveWriter/DeepZoomComposerStepbyStepMorePictures_3932/1_Import_thumb.jpg" width="644" height="461"></a> </p> <p>2.点击Compose，然后将右侧的图片摆放到中间的面板上，注意到下方有一些布局工具，大家可以用来做图片对齐，摆放完的图片将如图所示。</p> <p><a href="http://www.cnblogs.com/images/cnblogs_com/volnet/WindowsLiveWriter/DeepZoomComposerStepbyStepMorePictures_3932/2_Compose_2.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" border="0" alt="2_Compose" src="http://www.cnblogs.com/images/cnblogs_com/volnet/WindowsLiveWriter/DeepZoomComposerStepbyStepMorePictures_3932/2_Compose_thumb.jpg" width="644" height="461"></a> </p> <p>3.点击Export，导出图片，给它一个命名，点Export按钮即可。我这里起名为Demo1Export</p> <p><a href="http://www.cnblogs.com/images/cnblogs_com/volnet/WindowsLiveWriter/DeepZoomComposerStepbyStepMorePictures_3932/3_Export_2.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" border="0" alt="3_Export" src="http://www.cnblogs.com/images/cnblogs_com/volnet/WindowsLiveWriter/DeepZoomComposerStepbyStepMorePictures_3932/3_Export_thumb.jpg" width="644" height="462"></a> </p> <p>4.打开Visual Studio 2008，新建一个Silverlight项目，选择一个测试项目，我这里选择一个Web Application Project作为测试项目。</p> <p><a href="http://www.cnblogs.com/images/cnblogs_com/volnet/WindowsLiveWriter/DeepZoomComposerStepbyStepMorePictures_3932/4_SilverlightProject_2.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" border="0" alt="4_SilverlightProject" src="http://www.cnblogs.com/images/cnblogs_com/volnet/WindowsLiveWriter/DeepZoomComposerStepbyStepMorePictures_3932/4_SilverlightProject_thumb.jpg" width="429" height="363"></a> </p> <p>5.我们之前用Deep Zoom Composer导出的文件的文件夹内有个source images\OutputSdi的文件夹，将它Copy到我们用VS创建的Web项目的ClientBin文件夹下（可能需要先编译一次Web项目，注意不是Sliverlight项目，而是它的测试工程中）</p> <p><a href="http://www.cnblogs.com/images/cnblogs_com/volnet/WindowsLiveWriter/DeepZoomComposerStepbyStepMorePictures_3932/5_ClientBin_4.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" border="0" alt="5_ClientBin" src="http://www.cnblogs.com/images/cnblogs_com/volnet/WindowsLiveWriter/DeepZoomComposerStepbyStepMorePictures_3932/5_ClientBin_thumb_1.jpg" width="644" height="112"></a> <a href="http://www.cnblogs.com/images/cnblogs_com/volnet/WindowsLiveWriter/DeepZoomComposerStepbyStepMorePictures_3932/6_OutputSdi_2.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" border="0" alt="6_OutputSdi" src="http://www.cnblogs.com/images/cnblogs_com/volnet/WindowsLiveWriter/DeepZoomComposerStepbyStepMorePictures_3932/6_OutputSdi_thumb.jpg" width="690" height="92"></a></p> <p>6.导入文件后的项目如下所示。注意ClientBin文件夹。</p> <p><a href="http://www.cnblogs.com/images/cnblogs_com/volnet/WindowsLiveWriter/DeepZoomComposerStepbyStepMorePictures_3932/7_Solution_2.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" border="0" alt="7_Solution" src="http://www.cnblogs.com/images/cnblogs_com/volnet/WindowsLiveWriter/DeepZoomComposerStepbyStepMorePictures_3932/7_Solution_thumb.jpg" width="277" height="395"></a> </p> <p>7.点击Page.xaml，修改代码如下：</p><pre style="font-family: consolas"><span style="color: #0000ff">&lt;</span><span style="color: #800000">UserControl</span> <span style="color: #ff0000">x</span>:<span style="color: #ff0000">Class</span>=<span style="color: #0000ff">"SA_DeepZoomComposerDemo1.Page"</span>
    <span style="color: #ff0000">xmlns</span>=<span style="color: #0000ff">"http://schemas.microsoft.com/client/2007"</span> 
    <span style="color: #ff0000">xmlns</span>:<span style="color: #ff0000">x</span>=<span style="color: #0000ff">"http://schemas.microsoft.com/winfx/2006/xaml"</span> <span style="color: #0000ff">&gt;</span>
    <span style="color: #0000ff">&lt;</span><span style="color: #800000">Grid</span>
    <span style="color: #ff0000">x</span>:<span style="color: #ff0000">Name</span>=<span style="color: #0000ff">"LayoutRoot"</span>
    <span style="color: #ff0000">Background</span>=<span style="color: #0000ff">"AliceBlue"</span><span style="color: #0000ff">&gt;</span>

        <span style="color: #0000ff">&lt;</span><span style="color: #800000">MultiScaleImage</span>
              <span style="color: #ff0000">x</span>:<span style="color: #ff0000">Name</span>=<span style="color: #0000ff">"msi"</span>
              <span style="color: #ff0000">ViewportWidth</span>=<span style="color: #0000ff">"1.0"</span>
              <span style="color: #ff0000">Source</span>=<span style="color: #0000ff">"/demo1export/info.bin"</span> <span style="color: #ff0000">MouseLeftButtonDown</span>=<span style="color: #0000ff">"msi_MouseLeftButtonDown"</span> <span style="color: #ff0000">MouseLeftButtonUp</span>=<span style="color: #0000ff">"msi_MouseLeftButtonUp"</span> <span style="color: #ff0000">MouseMove</span>=<span style="color: #0000ff">"msi_MouseMove"</span><span style="color: #0000ff">/&gt;</span>
       <span style="color: #0000ff">&lt;/</span><span style="color: #800000">Grid</span><span style="color: #0000ff">&gt;</span>
<span style="color: #0000ff">&lt;/</span><span style="color: #800000">UserControl</span><span style="color: #0000ff">&gt;</span>
</pre>
<p>这里因为我暂时没研究出怎么控制鼠标滚轮，所以没法做出那种滚动的效果（时间太迟了，不想去找了）……注意<span style="color: #800000">MultiScaleImage</span>节点下的相关设置。我用于取代鼠标滚轮的做法是使用一个按钮来激活是否放大缩小。代码有点生硬，大家自己改造……</p>
<p>运行效果：</p>
<p><a href="http://www.cnblogs.com/images/cnblogs_com/volnet/WindowsLiveWriter/DeepZoomComposerStepbyStepMorePictures_3932/8_StaticEffect_2.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" border="0" alt="8_StaticEffect" src="http://www.cnblogs.com/images/cnblogs_com/volnet/WindowsLiveWriter/DeepZoomComposerStepbyStepMorePictures_3932/8_StaticEffect_thumb.jpg" width="644" height="444"></a> </p>
<p>试着将ViewportWidth修改为2.0，再次运行，效果将变为：</p>
<p><a href="http://www.cnblogs.com/images/cnblogs_com/volnet/WindowsLiveWriter/DeepZoomComposerStepbyStepMorePictures_3932/9_ChangeViewportWidth_2.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" border="0" alt="9_ChangeViewportWidth" src="http://www.cnblogs.com/images/cnblogs_com/volnet/WindowsLiveWriter/DeepZoomComposerStepbyStepMorePictures_3932/9_ChangeViewportWidth_thumb.jpg" width="644" height="449"></a> </p>
<p>8.点击Page.xmal.cs文件，修改代码如下：</p><pre style="font-family: consolas"><span style="color: #0000ff">using</span> System;
<span style="color: #0000ff">using</span> System.Collections.Generic;
<span style="color: #0000ff">using</span> System.Linq;
<span style="color: #0000ff">using</span> System.Windows;
<span style="color: #0000ff">using</span> System.Windows.Controls;
<span style="color: #0000ff">using</span> System.Windows.Documents;
<span style="color: #0000ff">using</span> System.Windows.Input;
<span style="color: #0000ff">using</span> System.Windows.Media;
<span style="color: #0000ff">using</span> System.Windows.Media.Animation;
<span style="color: #0000ff">using</span> System.Windows.Shapes;

<span style="color: #0000ff">namespace</span> SA_DeepZoomComposerDemo1
{
    <span style="color: #0000ff">public</span> partial <span style="color: #0000ff">class</span> Page : UserControl
    {
        <span style="color: #0000ff">public</span> Page()
        {
            InitializeComponent();
            <span style="color: #0000ff">new</span> MouseWheelHelper(msi).Moved += <span style="color: #0000ff">new</span> EventHandler&lt;MouseWheelEventArgs&gt;(msi_Scroll);
        }

        Mouse _m = <span style="color: #0000ff">new</span> Mouse();

        <span style="color: #0000ff">private</span> <span style="color: #0000ff">void</span> msi_MouseLeftButtonDown(<span style="color: #0000ff">object</span> sender, MouseButtonEventArgs e)
        {
            _m.DownPosition = e.GetPosition(msi);
        }

        <span style="color: #0000ff">private</span> <span style="color: #0000ff">void</span> msi_MouseLeftButtonUp(<span style="color: #0000ff">object</span> sender, MouseButtonEventArgs e)
        {
            _m.UpPosition = e.GetPosition(msi);
            msi.ViewportOrigin = <span style="color: #0000ff">new</span> Point(msi.ViewportOrigin.X + _m.UpInterval.X, msi.ViewportOrigin.Y + _m.UpInterval.Y);
        }

        <span style="color: #0000ff">private</span> <span style="color: #0000ff">void</span> msi_MouseMove(<span style="color: #0000ff">object</span> sender, MouseEventArgs e)
        {
            _m.MovePosition = e.GetPosition(msi);
        }

        <span style="color: #0000ff">private</span> <span style="color: #0000ff">void</span> msi_Scroll(<span style="color: #0000ff">object</span> sender, MouseWheelEventArgs e)
        {
            Point p = GetCenter();
            <span style="color: #0000ff">if</span> (e.Delta &gt; 0)
            {
                msi.ZoomAboutLogicalPoint(1.1, p.X, p.Y);
            }
            <span style="color: #0000ff">else</span>
            {
                msi.ZoomAboutLogicalPoint(0.9, p.X, p.Y);
            }
        }

        <span style="color: #0000ff">private</span> Point GetCenter()
        {
            <span style="color: #0000ff">double</span> centreX = msi.Width / 2;
            <span style="color: #0000ff">double</span> centreY = (msi.Width / msi.AspectRatio) / 2; <span style="color: #008000">//</span>
            <span style="color: #0000ff">return</span> msi.ElementToLogicalPoint(<span style="color: #0000ff">new</span> Point(centreX, centreY));
        }
    }
}
</pre>
<p>值得注意的是ZoomAboutLogicalPoint方法（试一下吧，试了你就知道……）</p>
<p>这里用到了MouseWheelHelper类，大家可以从<a title="http://blois.us/Silverlight/Scrolling2/MouseWheelHelper.cs" href="http://blois.us/Silverlight/Scrolling2/MouseWheelHelper.cs">http://blois.us/Silverlight/Scrolling2/MouseWheelHelper.cs</a>下载，并添加到项目中，具体用法我就不再赘述了……</p>
<p>9.另外需要你添加一个Mouse类，</p><pre style="font-family: consolas"><span style="color: #0000ff">using</span> System;
<span style="color: #0000ff">using</span> System.Windows;
<span style="color: #0000ff">using</span> System.Windows.Controls;
<span style="color: #0000ff">using</span> System.Windows.Documents;
<span style="color: #0000ff">using</span> System.Windows.Ink;
<span style="color: #0000ff">using</span> System.Windows.Input;
<span style="color: #0000ff">using</span> System.Windows.Media;
<span style="color: #0000ff">using</span> System.Windows.Media.Animation;
<span style="color: #0000ff">using</span> System.Windows.Shapes;

<span style="color: #0000ff">namespace</span> SA_DeepZoomComposerDemo1
{
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> Mouse
    {
        <span style="color: #0000ff">public</span> Point DownPosition
        {
            <span style="color: #0000ff">get</span>;
            <span style="color: #0000ff">set</span>;
        }
        <span style="color: #0000ff">public</span> Point UpPosition
        {
            <span style="color: #0000ff">get</span>;
            <span style="color: #0000ff">set</span>;
        }
        <span style="color: #0000ff">public</span> Point MovePosition
        {
            <span style="color: #0000ff">get</span>;
            <span style="color: #0000ff">set</span>;
        }
        <span style="color: #0000ff">public</span> Point UpInterval
        {
            <span style="color: #0000ff">get</span>
            {
                <span style="color: #0000ff">return</span> <span style="color: #0000ff">new</span> Point((DownPosition.X - UpPosition.X) / 1000, (DownPosition.Y - UpPosition.Y) / 1000);
            }
        }
    }
}
</pre>
<p>10.运行程序，得到下面的效果：</p>
<p><a href="http://www.cnblogs.com/images/cnblogs_com/volnet/WindowsLiveWriter/DeepZoomComposerStepbyStepMorePictures_3932/8_StaticEffect_2.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" border="0" alt="10_FinalEffect" src="http://www.cnblogs.com/images/cnblogs_com/volnet/WindowsLiveWriter/DeepZoomComposerStepbyStepMorePictures_3932/8_StaticEffect_thumb.jpg" width="644" height="444"></a> </p>
<p><strong>总结</strong></p>
<p>有许多需要修改的地方，不过通过这个简单的示例你应该知道<a title="http://memorabilia.hardrock.com/" href="http://memorabilia.hardrock.com/">http://memorabilia.hardrock.com/</a>的效果并不至于难道哪里去，Deep Zoom Composer为我们封装的API太强大了，让我们不需要花费多少体力就可以做出很酷的效果了。还犹豫什么？快点开始用Silverlight2吧……</p>
<p><strong>PS</strong></p>
<p>因为包括了大量的图片，所以没法打包上传了，有需要Source Code的同志留下邮箱吧（放一个无图片版本的给大家<a href="http://www.cnblogs.com/Files/volnet/Deep%20Zoom%20Composer%20Demo1(Without%20pictures).rar">下载</a>添加图片请参考步骤1到5。），我会尽快发送的……</p><img src ="http://www.cnblogs.com/volnet/aggbug/1139708.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37541/" target="_blank">[新闻]FriendFeed介绍</a>]]></description></item><item><title>应用程序的重定向</title><link>http://www.cnblogs.com/volnet/archive/2008/04/04/Process_Redirect.html</link><dc:creator>volnet（可以叫我大V）</dc:creator><author>volnet（可以叫我大V）</author><pubDate>Thu, 03 Apr 2008 18:03:00 GMT</pubDate><guid>http://www.cnblogs.com/volnet/archive/2008/04/04/Process_Redirect.html</guid><wfw:comment>http://www.cnblogs.com/volnet/comments/1137044.html</wfw:comment><comments>http://www.cnblogs.com/volnet/archive/2008/04/04/Process_Redirect.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cnblogs.com/volnet/comments/commentRss/1137044.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/volnet/services/trackbacks/1137044.html</trackback:ping><description><![CDATA[<p>今天有一个网友通过&#8220;<a href="http://space.cnblogs.com/msg/send/volnet%ef%bc%88%e5%8f%af%e4%bb%a5%e5%8f%ab%e6%88%91%e5%a4%a7V%ef%bc%89">发送短消息</a><img src="http://i.ixnp.com/images/v3.23.2/t.gif" alt="" />&#8221;向我提了一个题为《关于&#8220;C#重定向问题&#8221;的探讨》问题。本着对网友的负责，我决定写下完整示例。</p>
<p>关于网友所提的问题，因为描述的信息不够充足，我很难告知具体是哪里出了问题，直觉判断是masm.exe中的程序可能有点问题，但也不排除其他可能。希望能够提供更多的信息进行排错。</p>
<p>既然我写下了示例，而且自己也不曾做过相关的内容，就博留个脚印。</p>
<p><strong>基本思路</strong></p>
<p>应用程序的重定向问题基本上是通过启动另外一个进程运行另外的程序来执行一些处理，如果处理结果有返回值，主进程可以通过输出流的方式来进行获取。</p>
<p><strong>准备</strong></p>
<p>本示例采用WPF作为主进程的宿主程序，并通过构建控制台程序作为后台处理的程序进行处理。虽然采用WPF进行构建，但并不代表该文章所描述的内容仅限于此，WPF只是作为一个可视界面方便查看。如果您熟悉Winform也可以采用Winform编程的方式进行构建，甚至您仅用控制台应用程序也是可以的。（需要做一些小的改动）</p>
<p><strong>基本步骤（简略）</strong></p>
<p>1.添加如图所示的项目文件和程序界面：</p>
<p><a href="http://www.cnblogs.com/images/cnblogs_com/volnet/WindowsLiveWriter/Process_1CDF/WProcessRedirect_2.jpg"><img style="border: 0px none ;" alt="WProcessRedirect" src="http://www.cnblogs.com/images/cnblogs_com/volnet/WindowsLiveWriter/Process_1CDF/WProcessRedirect_thumb.jpg" border="0" height="274" width="561" /></a> </p>
<p>2.分别为两个按钮添加事件处理程序：</p>
<p>（</p>
<p>左侧：其中白色文本框Name=txtInput，蓝色文本框Name=txtOutput，RunProcessSync执行同步调用进程的操作，RunProcessAsync执行异步调用进程的操作</p>
<p>右侧：CA_Processer用于处理具体操作的一个简单的控制台应用程序，WpfAppProcess即为左侧所示宿主程序</p>
<p>）</p>
<p><strong>同步：</strong></p>
<p>同步的操作相对比较简单，也就是当按下按钮后，启动另外一个进程进行处理，我们可以在处理完毕后从StandardOutput对象中获取处理进程输出流。</p>
<p>代码如下：</p>
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">#region</span><span style="color: #000000;">&nbsp;Sync</span><span style="color: #000000;"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;RunProcessSync_Click(</span><span style="color: #0000ff;">object</span><span style="color: #000000;">&nbsp;sender,&nbsp;RoutedEventArgs&nbsp;e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;input&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;txtInput.Text;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProcessStartInfo&nbsp;info&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;InitializeProcessStartInfo(input);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtOutput.Text&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;DoProcessSync(info);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">///</span><span style="color: #008000;">&nbsp;</span><span style="color: #808080;">&lt;summary&gt;</span><span style="color: #008000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">///</span><span style="color: #008000;">&nbsp;同步处理COMMAND<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">///</span><span style="color: #008000;">&nbsp;</span><span style="color: #808080;">&lt;/summary&gt;</span><span style="color: #008000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">///</span><span style="color: #008000;">&nbsp;</span><span style="color: #808080;">&lt;param&nbsp;name="info"&gt;&lt;/param&gt;</span><span style="color: #008000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">///</span><span style="color: #008000;">&nbsp;</span><span style="color: #808080;">&lt;param&nbsp;name="input"&gt;&lt;/param&gt;</span><span style="color: #008000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">///</span><span style="color: #008000;">&nbsp;</span><span style="color: #808080;">&lt;returns&gt;&lt;/returns&gt;</span><span style="color: #808080;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;DoProcessSync(ProcessStartInfo&nbsp;info)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Process&nbsp;pro&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Process.Start(info);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;pro.StandardOutput.ReadToEnd();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">#endregion</span></div>
<p><strong>异步：</strong></p>
<p>异步的操作仅仅只是相对比较麻烦一点，因为是示例，所以也看不出什么麻烦来。同样是启动另外一个进程进行处理，但是在处理的过程中可以通过调用订阅到OutputDataReceived的委托将数据分批获取下来。显然异步的操作带给我们更多的便利，特别是较长进程下给用户带来了更优质的用户体验。用户不必等处理完毕后才能获取输出流。</p>
<p>代码如下：</p>
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">#region</span><span style="color: #000000;">&nbsp;Async</span><span style="color: #000000;"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;RunProcessAsync_Click(</span><span style="color: #0000ff;">object</span><span style="color: #000000;">&nbsp;sender,&nbsp;RoutedEventArgs&nbsp;e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProcessStartInfo&nbsp;info&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;InitializeProcessStartInfo(txtInput.Text);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtOutput.Text&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;DoProcessAsync(info);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">(Exception&nbsp;ex)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(ex.Message);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">///</span><span style="color: #008000;">&nbsp;</span><span style="color: #808080;">&lt;summary&gt;</span><span style="color: #008000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">///</span><span style="color: #008000;">&nbsp;异步处理COMMAND<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">///</span><span style="color: #008000;">&nbsp;</span><span style="color: #808080;">&lt;/summary&gt;</span><span style="color: #008000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">///</span><span style="color: #008000;">&nbsp;</span><span style="color: #808080;">&lt;param&nbsp;name="info"&gt;&lt;/param&gt;</span><span style="color: #008000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">///</span><span style="color: #008000;">&nbsp;</span><span style="color: #808080;">&lt;param&nbsp;name="input"&gt;&lt;/param&gt;</span><span style="color: #008000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">///</span><span style="color: #008000;">&nbsp;</span><span style="color: #808080;">&lt;returns&gt;&lt;/returns&gt;</span><span style="color: #808080;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;DoProcessAsync(ProcessStartInfo&nbsp;info)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">异步操作需要指定委托进行异步处理</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Process&nbsp;pro&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Process();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pro.OutputDataReceived&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;DataReceivedEventHandler(pro_OutputDataReceived);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pro.StartInfo&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;info;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pro.Start();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">此调用将启动&nbsp;StandardOutput&nbsp;上的异步读取操作。</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pro.BeginOutputReadLine();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pro.WaitForExit();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pro.Close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;_output;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;_output&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">.Empty;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;pro_OutputDataReceived(</span><span style="color: #0000ff;">object</span><span style="color: #000000;">&nbsp;sender,&nbsp;DataReceivedEventArgs&nbsp;e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">可通过调用&nbsp;CancelOutputRead&nbsp;取消异步读取操作。可通过调用方或事件处理程序取消读取操作。取消之后，可以再次调用&nbsp;BeginOutputReadLine&nbsp;继续进行异步读取操作。</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">!</span><span style="color: #0000ff;">string</span><span style="color: #000000;">.IsNullOrEmpty(e.Data))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_output&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;e.Data;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">#endregion</span></div>
<pre style="fo