<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_叶进.NET</title><subtitle type="text">If you think you can, you can!</subtitle><id>http://feed.cnblogs.com/blog/u/29205/rss</id><updated>2011-11-23T03:20:00Z</updated><author><name>随风逝去（叶进）</name><uri>http://www.cnblogs.com/adaiye/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/adaiye/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/29205/rss"/><entry><id>http://www.cnblogs.com/adaiye/archive/2011/11/13/fancan.html</id><title type="text">用WPF+MongoDB开发房产信息收集器(4)——房产信息采集器总体介绍附程序下载</title><summary type="text">增删改标签；删除、关注房产信息；快捷键；最小化系统托盘；工具栏、状态栏等；</summary><published>2011-11-13T11:51:00Z</published><updated>2011-11-13T11:51:00Z</updated><author><name>随风逝去（叶进）</name><uri>http://www.cnblogs.com/adaiye/</uri></author><link rel="alternate" href="http://www.cnblogs.com/adaiye/archive/2011/11/13/fancan.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/adaiye/archive/2011/11/13/fancan.html"/><content type="html">&lt;p&gt;又是一个周末，到目前为止，房产信息采集的基本功能可以说是完成了。主要包括&lt;/p&gt;&lt;ul&gt;&lt;li&gt;功能性&lt;br /&gt;增删改标签；&lt;br /&gt;删除、关注房产信息；&lt;/li&gt;&lt;li&gt;非功能性&lt;br /&gt;快捷键；&lt;br /&gt;最小化系统托盘；&lt;br /&gt;工具栏、状态栏等；&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/25645/2011111319250074.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;下面大致说下软件整体的情况和功能：&lt;/p&gt;&lt;ul&gt;&lt;li&gt;概况&lt;br /&gt;在主画面左侧是标签栏，用于显示自定义的标签和软件默认的标签（我关注的和全部）。&lt;br /&gt;表格上部是工具栏，其操作是针对表格中选中的行的。另外工具栏上最后两个按钮的功能分别是下载和刷新。&lt;br /&gt;画面最下面是状态栏，主要用于显示操作的状态和下载状态。&lt;/li&gt;&lt;li&gt;左侧标签栏&lt;br /&gt;标签是用户自定义添加的。用于过来下载下来的数据。用户可以根据自己关注的区域、价格、面积等设置标签的属性，方便筛选。右键侧边栏可以打开增删改标签的菜单。&lt;br /&gt;同时软件默认有我的关注标签，用于显示用户关注的房产信息。&lt;/li&gt;&lt;li&gt;工具栏、状态栏&lt;br /&gt;工具栏的操作是针对选中的行的。其他没什么好说的。&lt;/li&gt;&lt;li&gt;最小化系统托盘&lt;br /&gt;软件在最小化时会最小化到系统托盘，方便在后台运行。要不然总是在状态栏里显示着，影响大家工作。哈哈。&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color: #ff0000;"&gt;在运行程序之前，需要在本机安装有MongoDB数据库~~~各位有没有可以用程序安装MongoDB数据库及启动相应服务的方法，还请不吝赐教。&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;最后附上程序下载，各位敬请拍砖。&lt;a href="http://files.cnblogs.com/adaiye/house.zip"&gt;房产信息采集&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/adaiye/aggbug/2247501.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/adaiye/archive/2011/11/13/fancan.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/adaiye/archive/2011/11/13/MongDB-Beginning.html</id><title type="text">用WPF+MongoDB开发房产信息收集器(3)——MongoDB入门</title><summary type="text">距离上一篇文字过去已经很久了。一方面是工作有点忙，另外也是遇到点问题，到现在也没有解决。这个问题我会在文章的结尾在提出来，现在先进入这篇文章的主题吧——MongoDB入门。由于我完全是一个彻彻底底的初学者，所以写的都只是非常非常粗浅的入门内容，各位看官不要鄙视~~~~数据库安装数据库的安装，网上到处都是，我也是Google的，就不哆嗦，这里上个链接吧。MongoDB 安装与启动另外，对于初学者来说，我觉得直接用命令行是最好的学习数据库命令的途径。但毕竟比较累。这里也推荐两个GUI的MongoDB数据库管理工具。1. MongoVUE 这是老外开发的一个工具。2. MagicMongoDBToo</summary><published>2011-11-13T04:25:00Z</published><updated>2011-11-13T04:25:00Z</updated><author><name>随风逝去（叶进）</name><uri>http://www.cnblogs.com/adaiye/</uri></author><link rel="alternate" href="http://www.cnblogs.com/adaiye/archive/2011/11/13/MongDB-Beginning.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/adaiye/archive/2011/11/13/MongDB-Beginning.html"/><content type="html">&lt;p&gt;距离上一篇文字过去已经很久了。一方面是工作有点忙，另外也是遇到点问题，到现在也没有解决。这个问题我会在文章的结尾在提出来，现在先进入这篇文章的主题吧&amp;mdash;&amp;mdash;MongoDB入门。&lt;/p&gt;&lt;p&gt;由于我完全是一个彻彻底底的初学者，所以写的都只是非常非常粗浅的入门内容，各位看官不要鄙视~~~~&lt;/p&gt;&lt;ul&gt;&lt;li&gt;数据库安装&lt;br /&gt;数据库的安装，网上到处都是，我也是Google的，就不哆嗦，这里上个链接吧。&lt;a href="http://www.cnblogs.com/sourire/archive/2010/07/07/1772798.html" target="_blank"&gt;MongoDB 安装与启动&lt;/a&gt;&lt;br /&gt;另外，对于初学者来说，我觉得直接用命令行是最好的学习数据库命令的途径。但毕竟比较累。这里也推荐两个GUI的MongoDB数据库管理工具。&lt;br /&gt;1. &lt;a href="http://www.mongovue.com/" target="_blank"&gt;MongoVUE&lt;/a&gt; 这是老外开发的一个工具。&lt;br /&gt;2. &lt;a href="https://github.com/magicdict/MagicMongoDBTool" target="_blank"&gt;MagicMongoDBTool&lt;/a&gt; 这是原子里的&lt;a href="http://home.cnblogs.com/u/TextEditor/" target="_blank"&gt;magicDict&lt;/a&gt;开发的。各位可以去膜拜下~哈哈。作者已经开源了项目，有兴趣的朋友可以下载源代码自己瞅瞅。&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;数据库连接&lt;br /&gt;在连接数据库之前，我们首先需要确定我们要用的MongoDB Driver，Driver其实有很多，但我都没有接触过，也是初学，就从官方的&lt;a href="http://www.mongodb.org/display/DOCS/CSharp+Language+Center" target="_blank"&gt;Driver&lt;/a&gt;开始吧。下载编译之后应该有两个dll文件，分别是MongoDB.Bson.dll和MongoDB.Driver.dll。&lt;br /&gt;下面是我数据库连接的代码：&lt;br /&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 连接数据库&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param name="info"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Connect(DbInfo info)&lt;br /&gt;{&lt;br /&gt;    DbHelper.info = info;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (info.DbType == DbType.MongoDB)&lt;br /&gt;    {&lt;br /&gt;        MongoServerSettings mss = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; MongoServerSettings();&lt;br /&gt;        mss.ConnectionMode = ConnectionMode.Direct;   &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 数据库连接模式&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;mss.ConnectionMode = ConnectionMode.ReplicaSet;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 这个是针对数据库集的（多个数据库地址）&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;        mss.ConnectTimeout = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; TimeSpan(&lt;span style="color: #800080;"&gt;0&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0&lt;/span&gt;, &lt;span style="color: #800080;"&gt;20&lt;/span&gt;);   &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 超时时间 20s&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;        mss.Server = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; MongoServerAddress(info.Source, info.Port);   &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 数据库&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; mss.Servers是针对数据库集的&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;mss.DefaultCredentials = new MongoCredentials(info.Uid, info.Pwd, true);&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;        MongoServer ms = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; MongoServer(mss);&lt;br /&gt;        MongoDatabaseSettings mds = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; MongoDatabaseSettings(ms, info.DbName);&lt;br /&gt;&lt;br /&gt;        ms.Connect();&lt;br /&gt;        db = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; MongoDatabase(ms, mds);   &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 保存MongoDatabase信息，以便后续调用&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    }&lt;br /&gt;}&lt;/div&gt;这样连接数据库就OK了。&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Mapping&lt;br /&gt;连接好了数据库，就需要将自己定义的类和数据进行映射了。Driver里面（MongoDB.Bson.dll）已经提供了相应的映射方法：&lt;br /&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;BsonClassMap.RegisterClassMap&amp;lt;T&amp;gt;(cm =&amp;gt;&lt;br /&gt;{&lt;br /&gt;    cm.AutoMap();&lt;br /&gt;});&lt;/div&gt;另外在Mapping的时候也可以直接设置id以及id生成的方法：&lt;br /&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;BsonClassMap.RegisterClassMap&amp;lt;T&amp;gt;(cm =&amp;gt;&lt;br /&gt;{&lt;br /&gt;    cm.AutoMap();&lt;br /&gt;    cm.SetIdMember(cm.GetMemberMap(c =&amp;gt; c.ID));&lt;br /&gt;    cm.IdMemberMap.SetIdGenerator(StringObjectIdGenerator.Instance);&lt;br /&gt;});&lt;/div&gt;如果不在映射的时候设置，也可以在定义类时为相应的ID字段添加BsonId的属性：&lt;br /&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;[BsonId(IdGenerator = &lt;span style="color: #0000ff;"&gt;typeof&lt;/span&gt;(StringObjectIdGenerator))]&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; ID { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;; }&lt;/div&gt;通过属性，也可以设置属性不映射到数据库，那样在读写数据库的时候，该属性就会被忽略掉：&lt;br /&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;[BsonIgnore]&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; FavImage {&lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;;}&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;增删改查数据库&lt;br /&gt;接下去我们就可以通过Driver读写数据库了。&lt;br /&gt;在获取数据之前，我们需要获取对应类映射的Collection：&lt;br /&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;DbHelper.db.GetCollection&amp;lt;T&amp;gt;(name);   &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; name表示T映射的Collection名称&lt;/span&gt;&lt;/div&gt;GetCollection这个方法必须指定name参数。其实这里我觉得之前在映射的时候应该已经确定了T对应的Collection的名称，为什么这里的name必须要指定呢？还是说有其他方法我不知道的？&lt;br /&gt;MongoDB的读数据是Find命令。在Driver中也都是Find/FindAll方法。&lt;br /&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;GetCollection&amp;lt;T&amp;gt;().FindAll();&lt;/div&gt;在实际应用在，我们一般都是会有查询条件，以及排序条件的。&lt;br /&gt;MongoDB的查询条件是IMongoQuery，排序条件是IMongoSortBy。&lt;br /&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;GetCollection&amp;lt;T&amp;gt;().Find(query).SetSortOrder(sortBy);&lt;/div&gt;同时你也可以利用SetSkip和SetLimit来进行分页：&lt;br /&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;GetCollection&amp;lt;T&amp;gt;().Find(query).SetSortOrder(sortBy).SetSkip(skip).SetLimit(limit);&lt;/div&gt;下面的是我根据标签获取对应数据的方法，根据更新时间排序，还没有处理分页的功能：&lt;br /&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 获取标签对应的数据&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param name="ht"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; List&amp;lt;HouseInfo&amp;gt; Find(HouseTag ht)&lt;br /&gt;{&lt;br /&gt;    QueryComplete query = &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (ht != &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;    {&lt;br /&gt;        query = Query.And(&lt;br /&gt;            Query.GTE(HouseTag.PNameArea, ht.AreaMin),&lt;br /&gt;            Query.LTE(HouseTag.PNameArea, ht.AreaMax),&lt;br /&gt;            Query.GTE(HouseTag.PNamePrice, ht.PriceMin),&lt;br /&gt;            Query.LTE(HouseTag.PNamePrice, ht.PriceMax),&lt;br /&gt;            Query.GTE(HouseTag.PNamePriceTotal, ht.PriceTotalMin),&lt;br /&gt;            Query.LTE(HouseTag.PNamePriceTotal, ht.PriceTotalMax),&lt;br /&gt;            Query.GTE(HouseTag.PNameYear, ht.YearMin),&lt;br /&gt;            Query.LTE(HouseTag.PNameYear, ht.YearMax)&lt;br /&gt;        );&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (!&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;.IsNullOrEmpty(ht.Zone))&lt;br /&gt;        {&lt;br /&gt;            MongoDB.Bson.BsonRegularExpression reg = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; MongoDB.Bson.BsonRegularExpression(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;*{0}*&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, ht.Zone));&lt;br /&gt;            query = Query.And(query, Query.Matches(HouseTag.PNameZone, reg));&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; MongoHelper.FindAll&amp;lt;HouseInfo&amp;gt;(query, SortBy.Descending(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;UpdateTime&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)).ToList();&lt;br /&gt;}&lt;/div&gt;获取了数据之后，接下去就是保存数据了，保存（新增和修改）数据相对简单一点，直接用Save就好了，而且，我这里也没有处理变化的数据，每次保存都是整个对象进行了更新（就效率而言，肯定不合适，但就编程而言，那是方便不只一点点啊）：&lt;br /&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 更新数据集合&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;typeparam name="T"&amp;gt;&amp;lt;/typeparam&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param name="listEntity"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Save&amp;lt;T&amp;gt;(IEnumerable&amp;lt;IMongoEntity&amp;gt; listEntity)&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;where&lt;/span&gt; T : &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;, IMongoEntity&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (listEntity != &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;    {&lt;br /&gt;        MongoCollection&amp;lt;T&amp;gt; col = GetCollection&amp;lt;T&amp;gt;();&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (IMongoEntity entity &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt; listEntity)&lt;br /&gt;        {&lt;br /&gt;            col.Save(entity);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/div&gt;删除数据相对更新有个差别是需要根据对应获取条件（IMongoQuery）：&lt;br /&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 删除数据集合&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;typeparam name="T"&amp;gt;&amp;lt;/typeparam&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param name="listEntity"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Remove&amp;lt;T&amp;gt;(IEnumerable&amp;lt;IMongoEntity&amp;gt; listEntity)&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;where&lt;/span&gt; T : &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;, IMongoEntity&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (listEntity != &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;    {&lt;br /&gt;        MongoCollection&amp;lt;T&amp;gt; col = GetCollection&amp;lt;T&amp;gt;();&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (IMongoEntity entity &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt; listEntity)&lt;br /&gt;        {&lt;br /&gt;            col.Remove(Query.EQ(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;ID&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, entity.ID));&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;在最后说明下我在文章开头的时候提到的之前遇到的问题。&lt;/p&gt;&lt;p&gt;是这样的，我觉得这个房产信息采集器的目标用户主要是些关注房产交易信息的朋友，而这些人总不能都指望他们是IT出身，或者希望他们可以非常顺利的自己安装部署MongoDB吧。所以我就想是否可以在程序运行的时候自己去判断是否有MongoDB的服务，是否已经启动了MongoDB数据库。如果没有服务的话，创建一个服务；如果没有启动的话，就启动相应的服务。总之只要打开房产信息采集器，不需要再做其他的就直接可以用了。可是笔者尝试了n久，没能实现创建MongoDB服务的功能。&lt;/p&gt;&lt;p&gt;我的想法是在发布的时候将MongoDB的相应目录也一起放在程序的根目录。然后在没有相应服务的时候，启动相应的命令行自动创建MongoDB的服务，并启动。&lt;/p&gt;&lt;p&gt;所以这里有两个问题：&lt;/p&gt;&lt;ol&gt;&lt;li&gt;自动创建MongoDB的服务。&lt;/li&gt;&lt;li&gt;自动运行MongoDB的服务。&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;这两个问题，当然也可以引申为创建并启动服务（包括其他任何服务）。&lt;/p&gt;&lt;p&gt;不知道各位有没有什么建议或已经实现的方法？如果有的话，评论、私信都欢迎啊。最好能有现成的代码。哈哈。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/adaiye/aggbug/2246919.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/adaiye/archive/2011/11/13/MongDB-Beginning.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/adaiye/archive/2011/10/25/WPF-MongoDB-Fan-Thread.html</id><title type="text">用WPF+MongoDB开发房产信息收集器(2)——后台线程</title><summary type="text">想必童鞋们都知道，在进行耗时操作（如这里的爬虫抓取分析网站数据）时，如果没有后台线程来执行，就会造成界面假死。针对这个问题，.NET会为我们提供了很多处理后台线程的工具，BackgroundWorker就是其中一个，他将线程的处理全部都封装好了，对于应用那是一用一个方便。用法相当简单，定义一个BackgroundWorkerprivate BackgroundWorker bw = new BackgroundWorker();然后定义其DoWork和RunWorkerCompleted事件，如果想报告进度的话，还可以处理ProcessChanged事件。bw.DoWork += new Do</summary><published>2011-10-25T04:32:00Z</published><updated>2011-10-25T04:32:00Z</updated><author><name>随风逝去（叶进）</name><uri>http://www.cnblogs.com/adaiye/</uri></author><link rel="alternate" href="http://www.cnblogs.com/adaiye/archive/2011/10/25/WPF-MongoDB-Fan-Thread.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/adaiye/archive/2011/10/25/WPF-MongoDB-Fan-Thread.html"/><content type="html">&lt;p&gt;想必童鞋们都知道，在进行耗时操作（如这里的爬虫抓取分析网站数据）时，如果没有&lt;span id="comment_body_2227450" class="blog_comment_body"&gt;后台线程&lt;/span&gt;来执行，就会造成界面假死。&lt;/p&gt;&lt;p&gt;针对这个问题，.NET会为我们提供了很多处理&lt;span id="comment_body_2227450" class="blog_comment_body"&gt;后台线程&lt;/span&gt;的工具，BackgroundWorker就是其中一个，他将线程的处理全部都封装好了，对于应用那是一用一个方便。&lt;/p&gt;&lt;p&gt;用法相当简单，定义一个BackgroundWorker&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;private BackgroundWorker bw = new BackgroundWorker();&lt;br/&gt;&lt;/div&gt;&lt;p&gt;然后定义其DoWork和RunWorkerCompleted事件，如果想报告进度的话，还可以处理ProcessChanged事件。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;bw.DoWork += &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; DoWorkEventHandler(bw_DoWork);&lt;br /&gt;bw.RunWorkerCompleted += &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);&lt;/div&gt;&lt;p&gt;我们把耗时的操作（爬虫抓取分析网站数据）放在bw_DoWork里面，在抓取数据的时候要注意，由于是多线程，不能跨线程访问控件，所以如果会操作界面控件等时需要用dispatcher调用委托：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; bw_DoWork(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, DoWorkEventArgs e)&lt;br /&gt;{&lt;br /&gt;    e.Result = getData();&lt;br /&gt;}&lt;/div&gt;&lt;p&gt;然后在Completed事件里面显示数据：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; bw_RunWorkerCompleted(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, RunWorkerCompletedEventArgs e)&lt;br /&gt;{&lt;br /&gt;    List&amp;lt;HouseInfo&amp;gt; listHI = e.Result &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; List&amp;lt;HouseInfo&amp;gt;;&lt;br /&gt;    rgv.ItemsSource = &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;;&lt;br /&gt;    rgv.ItemsSource = listHI;&lt;br /&gt;}&lt;/div&gt;&lt;p&gt;OK,以上就是用线程来获取数据了。&lt;/p&gt;&lt;p&gt;但是很多情况下我们希望能够让爬虫隔一段时间去爬一下，而不是只爬一次，或者有用户主动触发的时候才爬。所以，我们需要一个闹钟（Timer）来通知爬虫该工作了。&lt;/p&gt;&lt;p&gt;所以，我们再定义一个Timer：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;private DispatcherTimer timer = new DispatcherTimer();&lt;br/&gt;&lt;/div&gt;&lt;p&gt;定一个Timer的时间间隔和Tick事件：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;timer.Tick += new EventHandler(timer_Tick);&lt;br/&gt;timer.Interval = new TimeSpan(0, 5, 0);   // 五分钟&lt;br/&gt;&lt;/div&gt;&lt;p&gt;然后在Tick事件里通知爬虫工作：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; timer_Tick(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (!bw.IsBusy)   &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 如果在IsBusy==true的情况下还RunWorker，BackgroundWorker会报异常&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    {&lt;br /&gt;        bw.RunWorkerAsync();&lt;br /&gt;    }&lt;br /&gt;}&lt;/div&gt;&lt;p&gt;最后附上可执行程序，供大家拍砖用~&lt;a href="http://files.cnblogs.com/adaiye/%E6%88%BF%E4%BA%A7%E4%BF%A1%E6%81%AF%E9%87%87%E9%9B%86%E5%99%A8.zip" target="_blank"&gt;房产信息采集器&lt;/a&gt;&lt;/p&gt;&lt;p&gt;接下去我会把MongoDB数据库增加上来，把下载下来的数据添加到数据库中~~~~~&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a id="homepage1_HomePageDays_DaysList_DayItem_0_DayList_0_TitleUrl_0" class="postTitle2" href="http://www.cnblogs.com/adaiye/archive/2011/10/23/2222147.html"&gt;用WPF+MongoDB开发房产信息收集器(1)&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/adaiye/aggbug/2223663.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/adaiye/archive/2011/10/25/WPF-MongoDB-Fan-Thread.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/adaiye/archive/2011/10/23/2222147.html</id><title type="text">用WPF+MongoDB开发房产信息收集器(1)</title><summary type="text">我相信，房子是现在压在众多国人肩上的最大负担。我也是其中一员，我也在关注房子。而我又是一个正在用Silverlight开发项目、正在学习MongoDB的程序员，所以，很自然的我想为我自己，也为众多在关注房子的朋友开发一个“房产信息采集器”。房产信息采集器：获取房产网站相应的二手房、一手房信息；可以让用户自主选择需要下载的区域的房产信息；可以过滤重复数据、虚假数据； 有新信息时可以提醒；可以设置是否关注或不感兴趣某一楼盘、某一区域的楼盘；......今天主要实现了从网站下载、解析数据，并没有将数据保存到数据库。先上图：要想从网站上获取房产信息首先要知道从哪里去下载、解析这些数据。很简单，现在的每</summary><published>2011-10-23T15:20:00Z</published><updated>2011-10-23T15:20:00Z</updated><author><name>随风逝去（叶进）</name><uri>http://www.cnblogs.com/adaiye/</uri></author><link rel="alternate" href="http://www.cnblogs.com/adaiye/archive/2011/10/23/2222147.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/adaiye/archive/2011/10/23/2222147.html"/><content type="html">&lt;p&gt;我相信，房子是现在压在众多国人肩上的最大负担。我也是其中一员，我也在关注房子。而我又是一个正在用Silverlight开发项目、正在学习MongoDB的程序员，所以，很自然的我想为我自己，也为众多在关注房子的朋友开发一个&amp;ldquo;房产信息采集器&amp;rdquo;。&lt;/p&gt;&lt;p&gt;房产信息采集器：&lt;/p&gt;&lt;ol&gt;&lt;li&gt;获取房产网站相应的二手房、一手房信息；&lt;/li&gt;&lt;li&gt;可以让用户自主选择需要下载的区域的房产信息；&lt;/li&gt;&lt;li&gt;可以过滤重复数据、虚假数据； &lt;/li&gt;&lt;li&gt;有新信息时可以提醒；&lt;/li&gt;&lt;li&gt;可以设置是否关注或不感兴趣某一楼盘、某一区域的楼盘；&lt;/li&gt;&lt;li&gt;......&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;今天主要实现了从网站下载、解析数据，并没有将数据保存到数据库。先上图：&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/25645/2011102323223828.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;要想从网站上获取房产信息首先要知道从哪里去下载、解析这些数据。&lt;/p&gt;&lt;p&gt;很简单，现在的每一个网站都有搜索功能，而搜索结果的都是分页的，这些分页都是有规律的，只要找到这个规律，源源不断的数据就有了。 当然，搜索结果的内容只是一个概况，如果要真正解析数据，还必须进入对应房产信息的页面再下载解析。 这些都没有什么技术的难点，就是需要去分析网站的html代码，有点烦而已。各位自己琢磨下就完全OK了。&lt;/p&gt;&lt;p&gt;这里推荐一个第三方解析下载Html的工具：&lt;a target="_blank" href="http://htmlagilitypack.codeplex.com/"&gt;Html Agility Pack&lt;/a&gt; 至于具体怎么用，CodePlex是的Demo我觉得已经说明的很清楚了，各位可以自己看下。&lt;/p&gt;&lt;p&gt;今天在用这个控件的时候遇到的几个问题跟大家分享下。&lt;/p&gt;&lt;ol&gt;&lt;li&gt;用Html Agility Pack来直接下载解析网站的时候会遇到中文乱码的问题。 我用的方法是用HttpWebRequest来下载网页的内容，返回一个Stream。 &lt;br /&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #008080;"&gt;1&lt;/span&gt; HttpWebRequest req = WebRequest.Create(&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Uri(url)) &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; HttpWebRequest; &lt;br /&gt;&lt;span style="color: #008080;"&gt;2&lt;/span&gt; req.Method = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;GET&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;; &lt;br /&gt;&lt;span style="color: #008080;"&gt;3&lt;/span&gt; WebResponse rs = req.GetResponse(); &lt;br /&gt;&lt;span style="color: #008080;"&gt;4&lt;/span&gt; Stream rss = rs.GetResponseStream(); &lt;br /&gt;&lt;span style="color: #008080;"&gt;5&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; rss;&lt;/div&gt;然后再用HtmlAgilityPack。后面的解析都是使用HtmlAgilityPack进行的。&lt;/li&gt;&lt;li&gt;XPath的路径问题，/开头的XPath路径表示是从根目录开始的。所以无论你想从一个已经选择好了的HtmlNode下获取其子节点，注意XPath不能用/开头。 &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;今天只是开始，我会坚持下去，一直完成、完善这个工具的。如果各位有什么意见或者感觉需要添加的功能，在下感激不尽。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/adaiye/aggbug/2222147.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/adaiye/archive/2011/10/23/2222147.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/adaiye/archive/2011/01/17/1937496.html</id><title type="text">解决FireFox不能Debug Silverlight程序的问题</title><summary type="text">最近在做一个Silverlight的项目，一直用的是FF，却发现默认情况下FF无法调试Silverlight。困扰了我n久，今天总算是搞定了~ 贴出来跟大家分享下： Try these steps... Type "about:config" into FF's address bar Accept the warning (if applicable) Search for the entr...</summary><published>2011-01-17T07:51:00Z</published><updated>2011-01-17T07:51:00Z</updated><author><name>随风逝去（叶进）</name><uri>http://www.cnblogs.com/adaiye/</uri></author><link rel="alternate" href="http://www.cnblogs.com/adaiye/archive/2011/01/17/1937496.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/adaiye/archive/2011/01/17/1937496.html"/><content type="html">&lt;p&gt;最近在做一个Silverlight的项目，一直用的是FF，却发现默认情况下FF无法调试Silverlight。困扰了我n久，今天总算是搞定了~&lt;/p&gt;  &lt;p&gt;贴出来跟大家分享下：&lt;/p&gt;  &lt;p&gt;Try these steps...&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Type &amp;quot;about:config&amp;quot; into FF's address bar &lt;/li&gt;    &lt;li&gt;Accept the warning (if applicable) &lt;/li&gt;    &lt;li&gt;Search for the entry &amp;quot;dom.ipc.plugins.enabled.npctrl.dll&amp;quot; &lt;/li&gt;    &lt;li&gt;Change its value from &amp;quot;true&amp;quot; to &amp;quot;false&amp;quot; (double-click) &lt;/li&gt;    &lt;li&gt;Restart the browser &lt;/li&gt; &lt;/ol&gt;  &lt;li&gt;&lt;/li&gt;  &lt;p&gt;OK，搞定~&lt;/p&gt;  &lt;p&gt;原文：&lt;a title="http://forums.silverlight.net/forums/t/755.aspx" href="http://forums.silverlight.net/forums/t/755.aspx"&gt;http://forums.silverlight.net/forums/t/755.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/adaiye/aggbug/1937496.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/adaiye/archive/2011/01/17/1937496.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/adaiye/archive/2009/04/18/waimaihui2_test.html</id><title type="text">终于可以继续往下了！</title><summary type="text">终于可以继续往下了！</summary><published>2009-04-18T08:23:00Z</published><updated>2009-04-18T08:23:00Z</updated><author><name>随风逝去（叶进）</name><uri>http://www.cnblogs.com/adaiye/</uri></author><link rel="alternate" href="http://www.cnblogs.com/adaiye/archive/2009/04/18/waimaihui2_test.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/adaiye/archive/2009/04/18/waimaihui2_test.html"/><content type="text">终于可以继续往下了！</content></entry><entry><id>http://www.cnblogs.com/adaiye/archive/2009/01/18/1377845.html</id><title type="text">回首2008</title><summary type="text">09年的脚步已经走出好几步了，我也直到现在才有点空来回顾我的2008，前段时间实在是太忙了（当然，也有空的时候，可是都被我用来看海贼王了，呵呵）！在08年，首先是我顺利的从浙江大学毕业了！走上了我人生的又一段旅程！顺带提一下，俺的毕业论文得了个优秀！ 哈哈哈哈......在学校的时候，其实不珍惜的读书的好，工作了才猛然惊醒读书的时光是多么地美好！可以睡懒觉，可以偶尔翘翘课，可以玩玩魔兽，可以散散步...</summary><published>2009-01-18T07:37:00Z</published><updated>2009-01-18T07:37:00Z</updated><author><name>随风逝去（叶进）</name><uri>http://www.cnblogs.com/adaiye/</uri></author><link rel="alternate" href="http://www.cnblogs.com/adaiye/archive/2009/01/18/1377845.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/adaiye/archive/2009/01/18/1377845.html"/><content type="text">09年的脚步已经走出好几步了，我也直到现在才有点空来回顾我的2008，前段时间实在是太忙了（当然，也有空的时候，可是都被我用来看海贼王了，呵呵）！在08年，首先是我顺利的从浙江大学毕业了！走上了我人生的又一段旅程！顺带提一下，俺的毕业论文得了个优秀！ 哈哈哈哈......在学校的时候，其实不珍惜的读书的好，工作了才猛然惊醒读书的时光是多么地美好！可以睡懒觉，可以偶尔翘翘课，可以玩玩魔兽，可以散散步...</content></entry><entry><id>http://www.cnblogs.com/adaiye/archive/2008/12/01/1345362.html</id><title type="text">另类的二级域名实现方法</title><summary type="text">高深的asp.net二级域名方法我不会，我只会土方法，但是却也不失为一个好方法！</summary><published>2008-12-01T15:44:00Z</published><updated>2008-12-01T15:44:00Z</updated><author><name>随风逝去（叶进）</name><uri>http://www.cnblogs.com/adaiye/</uri></author><link rel="alternate" href="http://www.cnblogs.com/adaiye/archive/2008/12/01/1345362.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/adaiye/archive/2008/12/01/1345362.html"/><content type="text">高深的asp.net二级域名方法我不会，我只会土方法，但是却也不失为一个好方法！</content></entry><entry><id>http://www.cnblogs.com/adaiye/archive/2008/10/16/Button_DoubleClick2.html</id><title type="text">【更新 2008.10.16】触发C#Button的双击事件</title><summary type="text">Button按钮事件默认的DoubleClick事件是被屏蔽的，如何才能处理按钮的双击事件呢？并针对一些朋友的意见和建议进行了改进！</summary><published>2008-10-16T05:59:00Z</published><updated>2008-10-16T05:59:00Z</updated><author><name>随风逝去（叶进）</name><uri>http://www.cnblogs.com/adaiye/</uri></author><link rel="alternate" href="http://www.cnblogs.com/adaiye/archive/2008/10/16/Button_DoubleClick2.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/adaiye/archive/2008/10/16/Button_DoubleClick2.html"/><content type="text">Button按钮事件默认的DoubleClick事件是被屏蔽的，如何才能处理按钮的双击事件呢？并针对一些朋友的意见和建议进行了改进！</content></entry><entry><id>http://www.cnblogs.com/adaiye/archive/2008/10/13/Button_DoubleClick.html</id><title type="text">触发C#Button的双击事件</title><summary type="text">Button按钮事件默认的DoubleClick事件是被屏蔽的，如何才能处理按钮的双击事件呢？</summary><published>2008-10-13T08:16:00Z</published><updated>2008-10-13T08:16:00Z</updated><author><name>随风逝去（叶进）</name><uri>http://www.cnblogs.com/adaiye/</uri></author><link rel="alternate" href="http://www.cnblogs.com/adaiye/archive/2008/10/13/Button_DoubleClick.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/adaiye/archive/2008/10/13/Button_DoubleClick.html"/><content type="text">Button按钮事件默认的DoubleClick事件是被屏蔽的，如何才能处理按钮的双击事件呢？</content></entry></feed>
