<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feed.feedsky.com/styles/feedsky0.xsl' type='text/xsl' ?><!--这是一个由Feedsy提供技术支持的Feed，为了提高读者阅读的体验，以及满足用户美化自己Feed的需要，我们设计了多种精美的Feed模板，提供给大家选择，所有最终呈现出来的样式，皆由用户自愿选择使用，未经许可，任何团体和个人，请不要擅自修改样式或者盗用，这是对于用户选择权的尊重。--><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fs="http://www.feedsky.com/namespace/feed" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link href="http://feed.feedsky.com/doho" type="application/rss+xml" rel="self"></atom:link><fs:self_link href="http://feed.feedsky.com/doho" type="application/rss+xml"></fs:self_link><lastBuildDate>Mon, 16 Nov 2009 03:30:00 GMT</lastBuildDate><title>博客园-Doho\'s Tech Space</title><description>Doho 的技术专栏</description><link>http://www.cnblogs.com/Doho/</link><language>zh-cn</language><pubDate>Tue, 09 Feb 2010 15:25:50 GMT</pubDate><item><title>智能手机计步器算法的实现</title><link>http://www.cnblogs.com/Doho/archive/2009/11/16/1603718.html</link><description>&lt;p&gt;　　阅读: 1470 评论: 14 作者: &lt;a href=&quot;http://www.cnblogs.com/Doho/&quot; target=&quot;_blank&quot;&gt;Doho&lt;/a&gt; 发表于 2009-11-16 11:30 &lt;a href=&quot;http://www.cnblogs.com/Doho/archive/2009/11/16/1603718.html&quot; target=&quot;_blank&quot;&gt;原文链接&lt;/a&gt;&lt;/p&gt;&lt;p&gt;现在的智能手机嵌入了一些微小的传感器，比如重力传感器、光传感器、声音传感器等。如何有效地利用这些传感器来开发一些应用，是一个值得深入研究的课题。比如开发医疗健康的应用、运动量监视器等。本文采用htc Touch Pro 智能手机的重力传感器来开发一款监视步数的程序，程序的关键在于计步模型的建立。由于程序算法还存在一定的问题，在本文最后的&amp;#8220;&lt;strong&gt;存在问题&lt;/strong&gt;&amp;#8221;给出。如有问题请不吝指出。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;智能手机&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;所谓的智能手机是指，具有独立的操作系统，用户可以自行安装第三方应用软件，通过此类程序来对手机的功能进行扩充，并可以通过移动通讯网络来实现无线网络接入的手机，它实际上就是一台迷你的个人电脑。智能手机的操作系统主要有：Windows Mobile, iPhone, BlackBerry, Linux等。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;步数识别系统&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;步数识别系统是指运行在移动手机上，能够监视用户走了多少步的应用程序。它一般由以下3个部分构成：&lt;/p&gt;
&lt;p&gt;&amp;#183; 传感器模块，用来采集传感器数据；&lt;/p&gt;
&lt;p&gt;&amp;#183; 特征提取模块，处理和分析原始数据，并进行特征提取、建立模型；&lt;/p&gt;
&lt;p&gt;&amp;#183; 步数识别模块，把所提取的特征用来识别步数。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;硬件设备&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;重力传感器（G-Sensor）又称为加速度传感器，用来感知加速度的变化，它使用三维方向的加速度分量来表示。G-Sensor被用在很多智能设备当中，比如IBM的高端笔记本电脑内置了G-Sensor，在发生剧烈的拉动时（如跌落），立即启动硬盘保护，避免硬盘损害。再如Apple 的 iPhone 使用G-Sensor来感知手机屏幕的方向，当在观看视频时手机横放，屏幕自动跟着旋转，这使得用户体验大大增加。本文采用htc Touch Pro手机上的G-Sensor，同样也适用于htc 其它型号的G-Sensor。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;方案实现&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;日常生活当中，人们使用手机一般是拿在手上，放在裤兜里，女士也经常把它放在包里。因为手机外界环境总是很复杂的，裤兜有松有紧，放在松裤兜的手机比放在紧的更容易抖动，产生的噪音也更多。为了使该算法尽可能的适用于不同的应用环境，需要对大部分的使用环境进行测试。首先，由4个人（8个或更多也可以）各自对不同手机使用环境进行数据收集，因为人们在同样的场合使用手机的习惯是不一样的。其次，对采集来的这些数据分别进行特征提取。最后，使用提取的特征模型进行识别检验。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;数据采集&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;htc Touch Pro G-Sensor提供的数据如表1所示。&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;表1. htc Touch Pro G-Sensor 提供的数据&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;
&lt;table border=&quot;1&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
    &lt;tr&gt;
        &lt;td valign=&quot;top&quot; width=&quot;109&quot;&gt;
        &lt;p&gt;&lt;strong&gt;字段&lt;/strong&gt;&lt;/p&gt;
        &lt;/td&gt;
        &lt;td valign=&quot;top&quot; width=&quot;498&quot;&gt;
        &lt;p&gt;&lt;strong&gt;含义&lt;/strong&gt;&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td valign=&quot;top&quot; width=&quot;109&quot;&gt;
        &lt;p&gt;&lt;strong&gt;X&lt;/strong&gt;&lt;/p&gt;
        &lt;/td&gt;
        &lt;td valign=&quot;top&quot; width=&quot;498&quot;&gt;
        &lt;p&gt;加速度在手机坐标X方向的分量大小，类型为 double&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td valign=&quot;top&quot; width=&quot;109&quot;&gt;
        &lt;p&gt;&lt;strong&gt;Y&lt;/strong&gt;&lt;/p&gt;
        &lt;/td&gt;
        &lt;td valign=&quot;top&quot; width=&quot;498&quot;&gt;
        &lt;p&gt;加速度在手机坐标Y方向的分量大小，类型为double&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td valign=&quot;top&quot; width=&quot;109&quot;&gt;
        &lt;p&gt;&lt;strong&gt;Z&lt;/strong&gt;&lt;/p&gt;
        &lt;/td&gt;
        &lt;td valign=&quot;top&quot; width=&quot;498&quot;&gt;
        &lt;p&gt;加速度在手机坐标Y方向的分量大小，类型为double&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td valign=&quot;top&quot; width=&quot;109&quot;&gt;
        &lt;p&gt;&lt;strong&gt;Length&lt;/strong&gt;&lt;/p&gt;
        &lt;/td&gt;
        &lt;td valign=&quot;top&quot; width=&quot;498&quot;&gt;
        &lt;p&gt;加速度大小，值为&lt;a href=&quot;http://images.cnblogs.com/cnblogs_com/Doho/WindowsLiveWriter/c7fc3b68d323_A0DB/clip_image002_2.gif&quot; target=&quot;_blank&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;clip_image002&quot; border=&quot;0&quot; alt=&quot;clip_image002&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/Doho/WindowsLiveWriter/c7fc3b68d323_A0DB/clip_image002_thumb.gif&quot; width=&quot;91&quot; height=&quot;22&quot; /&gt;&lt;/a&gt;，类型为double&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td valign=&quot;top&quot; width=&quot;109&quot;&gt;
        &lt;p&gt;&lt;strong&gt;Xangle&lt;/strong&gt;&lt;/p&gt;
        &lt;/td&gt;
        &lt;td valign=&quot;top&quot; width=&quot;498&quot;&gt;
        &lt;p&gt;加速度在手机坐标X方向的分量与地平面的夹角，范围为 -180&amp;#176;~180&amp;#176;，类型为 int&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td valign=&quot;top&quot; width=&quot;109&quot;&gt;
        &lt;p&gt;&lt;strong&gt;Yangle&lt;/strong&gt;&lt;/p&gt;
        &lt;/td&gt;
        &lt;td valign=&quot;top&quot; width=&quot;498&quot;&gt;
        &lt;p&gt;加速度在手机坐标Y方向的分量与地平面的夹角，范围为 -180&amp;#176;~180&amp;#176;，类型为 int&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td valign=&quot;top&quot; width=&quot;109&quot;&gt;
        &lt;p&gt;&lt;strong&gt;&lt;em&gt;DateTime&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
        &lt;/td&gt;
        &lt;td valign=&quot;top&quot; width=&quot;498&quot;&gt;
        &lt;p&gt;&lt;em&gt;采样的时间，不是G-Sensor &lt;/em&gt;&lt;em&gt;提供的，为了方便算法计算保留采样的时间，类型为double&lt;/em&gt;&lt;/p&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;本文算法采用的采样频率为20HZ，采样环境有：慢走、快走、跑步、骑自行车、坐的士、坐公交、坐电梯（上/下）、坐地铁、上下楼梯。其中，有走路的采集走100 步的数据（慢走、快走等），不是走路的采集1分钟的数据。由于开始和结束的时候放置手机（放口袋、包里）会有一些波动，不是我们想要的，因此这两个时间段的数据可以删去，或不考虑。手机放在口袋，收集的原始Length字段数据，在Excel 2007上绘制波形图如图1。横轴为每个采样点的索引，纵轴为Length值大小，也就是加速度大小，值在9.8附近变化。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://images.cnblogs.com/cnblogs_com/Doho/WindowsLiveWriter/c7fc3b68d323_A0DB/clip_image004_2.jpg&quot; target=&quot;_blank&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px&quot; title=&quot;Length字段波形图&quot; border=&quot;0&quot; alt=&quot;Length字段波形图&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/Doho/WindowsLiveWriter/c7fc3b68d323_A0DB/clip_image004_thumb.jpg&quot; width=&quot;644&quot; height=&quot;255&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;图 1. Length字段波形图&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;特征提取&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;由于收集的数据包含有噪声，特别是在两个动作切换之间Length字段值的波动比较大，比如慢走和上楼梯的过程。这里使用快速傅里叶变换（FFT）来处理Length字段的数据，波形图如图2。纵轴已向下平移9.8。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://images.cnblogs.com/cnblogs_com/Doho/WindowsLiveWriter/c7fc3b68d323_A0DB/clip_image006_2.jpg&quot; target=&quot;_blank&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px&quot; title=&quot;经过FFT处理的Length字段波形图&quot; border=&quot;0&quot; alt=&quot;经过FFT处理的Length字段波形图&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/Doho/WindowsLiveWriter/c7fc3b68d323_A0DB/clip_image006_thumb.jpg&quot; width=&quot;644&quot; height=&quot;262&quot;  /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;图 2. 经过FFT处理的Length字段波形图&lt;/p&gt;
&lt;p&gt;我们发现上面经过FFT处理的波形表现出一定的规则，就是在一定的时间间格内总有一个波谷，我们称这个点为&amp;#8220;踩点&amp;#8221;（如图3中的1、2、3、4点），也就是加速度最小的时刻（脚往下踩，手机相对有一个往下&amp;#8220;掉&amp;#8221;的过程）。另外，图3上A点也是波谷，但这一点是一个波动点，需要排除。所以踩点还必须小于一定的值-Threshold。当脚抬起来的时候（&amp;#8220;起点&amp;#8221;），身体对手机的作用力会增大，加速度也增大。所以起点必须大于Threshold，大于Threshold的都称为起点，因为我们只关心状态的变化。通常地，走路的时候步与步之间的有一定的时间间隔，走快些间隔小，走慢些间隔大。如果是跑的话，人类的极限是1秒种跑5步，也就是1步0.2秒。从起点到踩点状态变化1次就是走了1步。所以，我们建立包含如下2个要素的模型M：&lt;/p&gt;
&lt;p&gt;1. Length满足一定阀值，比如 &amp;#8211;Threshold &amp;lt; Length &amp;lt; Threshold&lt;/p&gt;
&lt;p&gt;2. 两个连续踩点的时间间隔必须在Timespan （200~2000毫秒）之内&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://images.cnblogs.com/cnblogs_com/Doho/WindowsLiveWriter/c7fc3b68d323_A0DB/clip_image008_2.jpg&quot; target=&quot;_blank&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px&quot; title=&quot;模型满足的条件&quot; border=&quot;0&quot; alt=&quot;模型满足的条件&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/Doho/WindowsLiveWriter/c7fc3b68d323_A0DB/clip_image008_thumb.jpg&quot; width=&quot;644&quot; height=&quot;261&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;图 3. 模型满足的条件&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;步数识别&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;我们把建立的模型用来检验在坐的士环境下所采集的数据，波形图如图4.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://images.cnblogs.com/cnblogs_com/Doho/WindowsLiveWriter/c7fc3b68d323_A0DB/clip_image010_2.jpg&quot; target=&quot;_blank&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px&quot; title=&quot;用模型检验的士环境下的数据&quot; border=&quot;0&quot; alt=&quot;用模型检验的士环境下的数据&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/Doho/WindowsLiveWriter/c7fc3b68d323_A0DB/clip_image010_thumb.jpg&quot; width=&quot;644&quot; height=&quot;227&quot;  /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;图 4. 用模型检验的士环境下的数据&lt;/p&gt;
&lt;p&gt;我们可以看到后面的一段时间是比较平稳的，前面有一些波动，这些波动导致了错误的识别，识别为走路。我们可以改进这个模型，增加一个约束条件：在监视了连续k（比如3）个踩点后才开始计步，所以从图3上标号为4的点开始计步。这样的约束就可以把大部分的抖动给去掉。把最终的模型用来检验所采集的不同环境下的数据得到的计步结果还是比较准确的。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;存在问题&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果拿着手机左右摇摆，采集的数据经过FFT 处理后的波形也符合上面的模型，但这并不是走路的状态，产生了错误的计步。直觉上认为这可以通过监视Xangle，Yangle 两个字段（在某一范围来回变化）来预防这种情况的发生。但使用htc G-Sensor采集的这两个字段的数据得到的效果并不好。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;经验教训&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;以上模型使用的数据只有Length字段，其它字段并没有用到。实际上，在决定只使用 Length 字段建立模型之前，有尝试使用Xangle，Yangle，并推导出Zangle（htc G-Sensor没有给出这个字段），使用这三个角度的状态变化来辅助判断计步。事实上这三个量的数值并不可靠，比如把手机水平放置，做左右摇摆，得到的Xangle，Yangle 的范围变化有超过 30&amp;#176;的。另外，也可以尝试使用Samsung，iPhone 上的G-Sensor，但本文并没有实现该想法。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;总结&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;使用智能手机来计步这个课题比较新颖，而且很容易实现个人健康监视的手机助理。收集不同使用环境下的数据是一个比较耗时的过程，需要由不同的人员在不同的环境下收集。整个计步的关键过程在于模型的建立，而且必须满足使用手机的任意性和处理不同环境下的噪声。所使用的算法也比较简单，用FFT 来处理原始数据，设立一定的阀值和时间间隔，然后监视过程的变化（踩点-&amp;gt;起点-&amp;gt;踩点）。其中采样率、Length阀值和时间间隔等参数的设置也是需要一个一个调试的，在本文的程序里采样率为20HZ，Threshold取1，时间间隔在200~2000毫秒。&lt;/p&gt;&lt;img src=&quot;http://www.cnblogs.com/Doho/aggbug/1603718.html?type=1&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;/&gt;&lt;p&gt;　　&lt;a href=&quot;http://www.cnblogs.com/Doho/archive/2009/11/16/1603718.html#commentform&quot; target=&quot;_blank&quot;&gt;发表评论&lt;/a&gt;&lt;/p&gt;&lt;hr/&gt;&lt;p&gt;新闻频道：&lt;a href=&quot;http://news.cnblogs.com/n/52993/&quot; target=&quot;_blank&quot;&gt;微软张亚勤：教育评估机制急功近利阻碍创新&lt;/a&gt;&lt;/p&gt;&lt;p&gt;推荐链接：&lt;a href=&quot;http://kb.cnblogs.com/zt/windows7/&quot; target=&quot;_blank&quot;&gt;Windows 7专题发布&lt;/a&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;网站导航：&lt;a href=&quot;http://www.cnblogs.com&quot; target=&quot;_blank&quot;&gt;博客园首页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/&quot; target=&quot;_blank&quot;&gt;个人主页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://news.cnblogs.com&quot; target=&quot;_blank&quot;&gt;新闻&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com&quot; target=&quot;_blank&quot;&gt;社区&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com/q/&quot; target=&quot;_blank&quot;&gt;博问&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/ing/&quot; target=&quot;_blank&quot;&gt;闪存&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://kb.cnblogs.com&quot; target=&quot;_blank&quot;&gt;知识库&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/308439674/doho/feedsky/s.gif?r=http://www.cnblogs.com/Doho/archive/2009/11/16/1603718.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/doho/308439674/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/doho/308439674/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Mon, 16 Nov 2009 11:30:00 +0800</pubDate><author>Doho</author><guid isPermaLink="false">http://www.cnblogs.com/Doho/archive/2009/11/16/1603718.html</guid><dc:creator>Doho</dc:creator><fs:srclink>http://www.cnblogs.com/Doho/archive/2009/11/16/1603718.html</fs:srclink><fs:srcfeed>http://www.cnblogs.com/Doho/rss.aspx</fs:srcfeed><fs:itemid>feedsky/doho/~1223974/308439674/1225823</fs:itemid></item><item><title>支持手势的 Windows Mobile 工具条</title><link>http://www.cnblogs.com/Doho/archive/2009/11/05/1596732.html</link><description>&lt;p&gt;阅读: 1160 评论: 3 作者: &lt;a href=&quot;http://www.cnblogs.com/Doho/&quot; target=&quot;_blank&quot;&gt;Doho&lt;/a&gt; 发表于 2009-11-05 15:53 &lt;a href=&quot;http://www.cnblogs.com/Doho/archive/2009/11/05/1596732.html&quot; target=&quot;_blank&quot;&gt;原文链接&lt;/a&gt;&lt;/p&gt;&lt;blockquote&gt;
&lt;p&gt;htc touch diamond 的图片管理器有一个可左右伸缩的工具条，用起来很方便 (图 1)。现在我们来实现一个可左右伸缩又支持手势的工具条 (图 2)。&lt;/p&gt;
&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; width=&quot;549&quot;&gt;
&lt;tr&gt;
&lt;td valign=&quot;top&quot; width=&quot;239&quot;&gt;
&lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;http://images.cnblogs.com/cnblogs_com/Doho/WindowsLiveWriter/WindowsMobile_C675/image_2.png&quot; target=&quot;_blank&quot;&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px&quot; title=&quot;htc touch diamond toolbox&quot; border=&quot;0&quot; alt=&quot;htc touch diamond toolbox&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/Doho/WindowsLiveWriter/WindowsMobile_C675/image_thumb.png&quot; width=&quot;184&quot; height=&quot;244&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td valign=&quot;top&quot; width=&quot;308&quot;&gt;
&lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;http://images.cnblogs.com/cnblogs_com/Doho/WindowsLiveWriter/WindowsMobile_C675/image_4.png&quot; target=&quot;_blank&quot;&gt;&lt;img style=&quot;border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto&quot; title=&quot;toolbox with gesture support&quot; border=&quot;0&quot; alt=&quot;toolbox with gesture support&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/Doho/WindowsLiveWriter/WindowsMobile_C675/image_thumb_1.png&quot; width=&quot;184&quot; height=&quot;244&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign=&quot;top&quot; width=&quot;239&quot;&gt;
&lt;p align=&quot;center&quot;&gt;图 1. htc touch diamond 的图片管理器&lt;/p&gt;&lt;/td&gt;
&lt;td valign=&quot;top&quot; width=&quot;308&quot;&gt;
&lt;p align=&quot;center&quot;&gt;图 2. toolbox with gesture support，效果图&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/blockquote&gt;
&lt;h2&gt;绘制工具条&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;我们简单地新建一个用户控件，添加图片框作为图标按钮，再把它添加到主窗口。在窗口初始化处设置工具条高度和位置。&lt;a href=&quot;http://images.cnblogs.com/cnblogs_com/Doho/WindowsLiveWriter/WindowsMobile_C675/image_6.png&quot; target=&quot;_blank&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; align=&quot;right&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/Doho/WindowsLiveWriter/WindowsMobile_C675/image_thumb_2.png&quot; width=&quot;183&quot; height=&quot;244&quot; /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;div class=&quot;cnblogs_code&quot;&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;img alt=&quot;&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/None.gif&quot; /&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;Form1()&lt;br /&gt;&lt;img id=&quot;Codehighlighter1_15_166_Open_Image&quot; onclick=&quot;this.style.display='none'; document.getElementById('Codehighlighter1_15_166_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_15_166_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_15_166_Closed_Text').style.display='inline';&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif&quot;&gt;&lt;img style=&quot;display: none&quot; id=&quot;Codehighlighter1_15_166_Closed_Image&quot; onclick=&quot;this.style.display='none'; document.getElementById('Codehighlighter1_15_166_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_15_166_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_15_166_Open_Text').style.display='inline';&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif&quot;&gt;&lt;/span&gt;&lt;span style=&quot;border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid&quot; id=&quot;Codehighlighter1_15_166_Closed_Text&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://www.cnblogs.com/Images/dot.gif&quot; /&gt;&lt;/span&gt;&lt;span id=&quot;Codehighlighter1_15_166_Open_Text&quot;&gt;&lt;span style=&quot;color: #000000&quot;&gt;{&lt;br /&gt;&lt;img alt=&quot;&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif&quot; /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;InitializeComponent();&lt;br /&gt;&lt;img alt=&quot;&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif&quot; /&gt;&lt;br /&gt;&lt;img alt=&quot;&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif&quot; /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;set&amp;nbsp;the&amp;nbsp;tool&amp;nbsp;box&amp;nbsp;to&amp;nbsp;dock&amp;nbsp;right&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;&lt;br /&gt;&lt;img alt=&quot;&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif&quot; /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;toolbox.Height&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;.Height;&lt;br /&gt;&lt;img alt=&quot;&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif&quot; /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;toolbox.Location&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;Point(&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;.Width,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #800080&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;);&lt;br /&gt;&lt;img alt=&quot;&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif&quot; /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;&lt;img alt=&quot;&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/None.gif&quot; /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;HTC G-Sensor&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;HTC &lt;a href=&quot;http://baike.baidu.com/view/1551035.html&quot; target=&quot;_blank&quot;&gt;G-Sensor&lt;/a&gt;，加速度感应器，又叫重力感应器。由于它比较小巧，可以内嵌到其它设备中。现在很多智能手机都有 G-Sensor，比较常见的有 HTC 和 Samsun。本文的例子是使用 HTC&amp;nbsp; 的 G-Sensor。&lt;/p&gt;
&lt;p&gt;现在 HTC 上G-Sensor 的三维数据精度已经达到了双精度。由G-Sensor 可以开发出很多很有趣的重力感应游戏，比如 &lt;a href=&quot;http://www.resco.net/company/press/releases/2009-07-16.htm&quot; target=&quot;_blank&quot;&gt;Resco Snake&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;下面我们就来介绍如何访问 HTC 的G-Sensor。&lt;/p&gt;
&lt;p&gt;网上有现成的控件（c#）直接调用，或者可以参照 codeplex 上的 &lt;a href=&quot;http://sensorapi.codeplex.com/&quot; target=&quot;_blank&quot;&gt;sensor api&lt;/a&gt;。由不同库封装得到的数据不一样，但都可以进行简单的比例转换就可以得到相同的数据。我们选用accelerometer.dll。&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;&lt;div class=&quot;cnblogs_code&quot;&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;img alt=&quot;&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/None.gif&quot; /&gt;&lt;span style=&quot;color: #000000&quot;&gt;HTCGSensor&amp;nbsp;gsensor&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;HTCGSensor();&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;Initialize&amp;nbsp;a&amp;nbsp;HTCGSensor&amp;nbsp;object&amp;nbsp;to&amp;nbsp;access&amp;nbsp;htc&amp;nbsp;g-sensor&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;&lt;br /&gt;&lt;img alt=&quot;&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/None.gif&quot; /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;GVector&amp;nbsp;vector&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;gsensor.GetGVector();&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;call&amp;nbsp;GetGVector()&amp;nbsp;method&amp;nbsp;to&amp;nbsp;get a&amp;nbsp;current&amp;nbsp;GVector&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;&lt;br /&gt;&lt;img alt=&quot;&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/None.gif&quot; /&gt;&lt;/span&gt;&lt;/div&gt;为了得到连续的数据，我们在一个 timer 里调用GetGVector()。&lt;/pre&gt;&lt;pre class=&quot;csharpcode&quot;&gt;GVector 是一个结构体，用来表示一个受力状态，原型如下：&lt;/pre&gt;&lt;pre class=&quot;csharpcode&quot;&gt;&lt;div class=&quot;cnblogs_code&quot;&gt;&lt;img id=&quot;Code_Closed_Image_155441&quot; onclick=&quot;this.style.display='none'; document.getElementById('Code_Closed_Text_155441').style.display='none'; document.getElementById('Code_Open_Image_155441').style.display='inline'; document.getElementById('Code_Open_Text_155441').style.display='inline';&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif&quot; width=&quot;11&quot; height=&quot;16&quot;&gt;&lt;img style=&quot;display: none&quot; id=&quot;Code_Open_Image_155441&quot; onclick=&quot;this.style.display='none'; document.getElementById('Code_Open_Text_155441').style.display='none'; getElementById('Code_Closed_Image_155441').style.display='inline'; getElementById('Code_Closed_Text_155441').style.display='inline';&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif&quot; width=&quot;11&quot; height=&quot;16&quot;&gt;&lt;span id=&quot;Code_Closed_Text_155441&quot; class=&quot;cnblogs_code_Collapse&quot;&gt;Code&lt;/span&gt;&lt;span style=&quot;display: none&quot; id=&quot;Code_Open_Text_155441&quot;&gt;&lt;br /&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;img id=&quot;Codehighlighter1_21_29_Open_Image&quot; onclick=&quot;this.style.display='none'; document.getElementById('Codehighlighter1_21_29_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_21_29_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_21_29_Closed_Text').style.display='inline';&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif&quot;&gt;&lt;img style=&quot;display: none&quot; id=&quot;Codehighlighter1_21_29_Closed_Image&quot; onclick=&quot;this.style.display='none'; document.getElementById('Codehighlighter1_21_29_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_21_29_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_21_29_Open_Text').style.display='inline';&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;Length&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid&quot; id=&quot;Codehighlighter1_21_29_Closed_Text&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://www.cnblogs.com/Images/dot.gif&quot; /&gt;&lt;/span&gt;&lt;span id=&quot;Codehighlighter1_21_29_Open_Text&quot;&gt;&lt;span style=&quot;color: #000000&quot;&gt;{&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;;&amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;加速度大小&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;&lt;br /&gt;&lt;img id=&quot;Codehighlighter1_53_66_Open_Image&quot; onclick=&quot;this.style.display='none'; document.getElementById('Codehighlighter1_53_66_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_53_66_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_53_66_Closed_Text').style.display='inline';&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif&quot;&gt;&lt;img style=&quot;display: none&quot; id=&quot;Codehighlighter1_53_66_Closed_Image&quot; onclick=&quot;this.style.display='none'; document.getElementById('Codehighlighter1_53_66_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_53_66_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_53_66_Open_Text').style.display='inline';&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;X&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid&quot; id=&quot;Codehighlighter1_53_66_Closed_Text&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://www.cnblogs.com/Images/dot.gif&quot; /&gt;&lt;/span&gt;&lt;span id=&quot;Codehighlighter1_53_66_Open_Text&quot;&gt;&lt;span style=&quot;color: #000000&quot;&gt;{&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;;&amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;加速度X轴分量大小&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;&lt;br /&gt;&lt;img id=&quot;Codehighlighter1_99_112_Open_Image&quot; onclick=&quot;this.style.display='none'; document.getElementById('Codehighlighter1_99_112_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_99_112_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_99_112_Closed_Text').style.display='inline';&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif&quot;&gt;&lt;img style=&quot;display: none&quot; id=&quot;Codehighlighter1_99_112_Closed_Image&quot; onclick=&quot;this.style.display='none'; document.getElementById('Codehighlighter1_99_112_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_99_112_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_99_112_Open_Text').style.display='inline';&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;Xangle&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid&quot; id=&quot;Codehighlighter1_99_112_Closed_Text&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://www.cnblogs.com/Images/dot.gif&quot; /&gt;&lt;/span&gt;&lt;span id=&quot;Codehighlighter1_99_112_Open_Text&quot;&gt;&lt;span style=&quot;color: #000000&quot;&gt;{&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;;&amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;加速度X轴分量与水平面夹角&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;&lt;br /&gt;&lt;img id=&quot;Codehighlighter1_144_157_Open_Image&quot; onclick=&quot;this.style.display='none'; document.getElementById('Codehighlighter1_144_157_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_144_157_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_144_157_Closed_Text').style.display='inline';&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif&quot;&gt;&lt;img style=&quot;display: none&quot; id=&quot;Codehighlighter1_144_157_Closed_Image&quot; onclick=&quot;this.style.display='none'; document.getElementById('Codehighlighter1_144_157_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_144_157_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_144_157_Open_Text').style.display='inline';&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;Y&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid&quot; id=&quot;Codehighlighter1_144_157_Closed_Text&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://www.cnblogs.com/Images/dot.gif&quot; /&gt;&lt;/span&gt;&lt;span id=&quot;Codehighlighter1_144_157_Open_Text&quot;&gt;&lt;span style=&quot;color: #000000&quot;&gt;{&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;;&amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;加速度Y轴分量大小&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;&lt;br /&gt;&lt;img id=&quot;Codehighlighter1_191_204_Open_Image&quot; onclick=&quot;this.style.display='none'; document.getElementById('Codehighlighter1_191_204_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_191_204_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_191_204_Closed_Text').style.display='inline';&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif&quot;&gt;&lt;img style=&quot;display: none&quot; id=&quot;Codehighlighter1_191_204_Closed_Image&quot; onclick=&quot;this.style.display='none'; document.getElementById('Codehighlighter1_191_204_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_191_204_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_191_204_Open_Text').style.display='inline';&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;Yangle&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid&quot; id=&quot;Codehighlighter1_191_204_Closed_Text&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://www.cnblogs.com/Images/dot.gif&quot; /&gt;&lt;/span&gt;&lt;span id=&quot;Codehighlighter1_191_204_Open_Text&quot;&gt;&lt;span style=&quot;color: #000000&quot;&gt;{&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;;&amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;加速度Y轴分量与水平面夹角&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;&lt;br /&gt;&lt;img id=&quot;Codehighlighter1_236_249_Open_Image&quot; onclick=&quot;this.style.display='none'; document.getElementById('Codehighlighter1_236_249_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_236_249_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_236_249_Closed_Text').style.display='inline';&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif&quot;&gt;&lt;img style=&quot;display: none&quot; id=&quot;Codehighlighter1_236_249_Closed_Image&quot; onclick=&quot;this.style.display='none'; document.getElementById('Codehighlighter1_236_249_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_236_249_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_236_249_Open_Text').style.display='inline';&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;Z&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid&quot; id=&quot;Codehighlighter1_236_249_Closed_Text&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://www.cnblogs.com/Images/dot.gif&quot; /&gt;&lt;/span&gt;&lt;span id=&quot;Codehighlighter1_236_249_Open_Text&quot;&gt;&lt;span style=&quot;color: #000000&quot;&gt;{&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;;&amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;加速度Z轴分量大小&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;&lt;br /&gt;&lt;img alt=&quot;&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/None.gif&quot; /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; 

下面两张图片是两个状态的演示（来自codeplex）：&lt;/pre&gt;
&lt;table border=&quot;1&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;
&lt;tr&gt;
&lt;td valign=&quot;top&quot; width=&quot;324&quot;&gt;
&lt;p&gt;&lt;a href=&quot;http://images.cnblogs.com/cnblogs_com/Doho/WindowsLiveWriter/WindowsMobile_C675/clip_image002_2.jpg&quot; target=&quot;_blank&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;clip_image002&quot; border=&quot;0&quot; alt=&quot;clip_image002&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/Doho/WindowsLiveWriter/WindowsMobile_C675/clip_image002_thumb.jpg&quot; width=&quot;244&quot; height=&quot;244&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;竖直放置，x,y,z 分量分别为:0, -9.8, 0&lt;/p&gt;&lt;/td&gt;
&lt;td valign=&quot;top&quot; width=&quot;323&quot;&gt;
&lt;p&gt;&lt;a href=&quot;http://images.cnblogs.com/cnblogs_com/Doho/WindowsLiveWriter/WindowsMobile_C675/clip_image004_2.jpg&quot; target=&quot;_blank&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;clip_image004&quot; border=&quot;0&quot; alt=&quot;clip_image004&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/Doho/WindowsLiveWriter/WindowsMobile_C675/clip_image004_thumb.jpg&quot; width=&quot;244&quot; height=&quot;244&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;水平放置，x,y,z 分量分别为:0, 0, -9.8&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;style type=&quot;text/css&quot;&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, &quot;Courier New&quot;, courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;style type=&quot;text/css&quot;&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, &quot;Courier New&quot;, courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;style type=&quot;text/css&quot;&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, &quot;Courier New&quot;, courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;style type=&quot;text/css&quot;&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, &quot;Courier New&quot;, courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
&lt;/blockquote&gt;
&lt;h2&gt;手势&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;定义手势 Shack left:手机正面正对着用户，往左摇一下。Shack right 类似。我们从G-Sensor 读取的数据来判断手势，取样频率 20Hz。这里只判断 X 轴的分量，数据用 excel 绘出图来：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://images.cnblogs.com/cnblogs_com/Doho/WindowsLiveWriter/WindowsMobile_C675/image_12.png&quot; target=&quot;_blank&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; align=&quot;right&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/Doho/WindowsLiveWriter/WindowsMobile_C675/image_thumb_5.png&quot; width=&quot;369&quot; height=&quot;185&quot; /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;我们先监视值小于2的X，置状态为1，接着监视在 5~15 范围内的X，再置状态为0，完成一个往左甩的手势。为了消除抖动，我们加入了时间判断，即一个手势的时间范围为 10~500 毫秒。程序如下:&lt;/p&gt;&lt;pre class=&quot;csharpcode&quot;&gt;        &lt;/pre&gt;
&lt;style type=&quot;text/css&quot;&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, &quot;Courier New&quot;, courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
&lt;div class=&quot;cnblogs_code&quot;&gt;&lt;img id=&quot;Code_Closed_Image_155508&quot; onclick=&quot;this.style.display='none'; document.getElementById('Code_Closed_Text_155508').style.display='none'; document.getElementById('Code_Open_Image_155508').style.display='inline'; document.getElementById('Code_Open_Text_155508').style.display='inline';&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif&quot; width=&quot;11&quot; height=&quot;16&quot;&gt;&lt;img style=&quot;display: none&quot; id=&quot;Code_Open_Image_155508&quot; onclick=&quot;this.style.display='none'; document.getElementById('Code_Open_Text_155508').style.display='none'; getElementById('Code_Closed_Image_155508').style.display='inline'; getElementById('Code_Closed_Text_155508').style.display='inline';&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif&quot; width=&quot;11&quot; height=&quot;16&quot;&gt;&lt;span id=&quot;Code_Closed_Text_155508&quot; class=&quot;cnblogs_code_Collapse&quot;&gt;Code&lt;/span&gt;&lt;span style=&quot;display: none&quot; id=&quot;Code_Open_Text_155508&quot;&gt;&lt;br /&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;img alt=&quot;&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/None.gif&quot; /&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;static&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;FeedData(&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;x,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;y,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;z,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;length,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;xAngle,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;yAngle)&lt;br /&gt;&lt;img id=&quot;Codehighlighter1_111_1025_Open_Image&quot; onclick=&quot;this.style.display='none'; document.getElementById('Codehighlighter1_111_1025_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_111_1025_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_111_1025_Closed_Text').style.display='inline';&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif&quot;&gt;&lt;img style=&quot;display: none&quot; id=&quot;Codehighlighter1_111_1025_Closed_Image&quot; onclick=&quot;this.style.display='none'; document.getElementById('Codehighlighter1_111_1025_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_111_1025_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_111_1025_Open_Text').style.display='inline';&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid&quot; id=&quot;Codehighlighter1_111_1025_Closed_Text&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://www.cnblogs.com/Images/dot.gif&quot; /&gt;&lt;/span&gt;&lt;span id=&quot;Codehighlighter1_111_1025_Open_Text&quot;&gt;&lt;span style=&quot;color: #000000&quot;&gt;{&lt;br /&gt;&lt;img alt=&quot;&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif&quot; /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;(state&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #800080&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;)&lt;br /&gt;&lt;img id=&quot;Codehighlighter1_153_326_Open_Image&quot; onclick=&quot;this.style.display='none'; document.getElementById('Codehighlighter1_153_326_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_153_326_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_153_326_Closed_Text').style.display='inline';&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif&quot;&gt;&lt;img style=&quot;display: none&quot; id=&quot;Codehighlighter1_153_326_Closed_Image&quot; onclick=&quot;this.style.display='none'; document.getElementById('Codehighlighter1_153_326_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_153_326_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_153_326_Open_Text').style.display='inline';&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid&quot; id=&quot;Codehighlighter1_153_326_Closed_Text&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://www.cnblogs.com/Images/dot.gif&quot; /&gt;&lt;/span&gt;&lt;span id=&quot;Codehighlighter1_153_326_Open_Text&quot;&gt;&lt;span style=&quot;color: #000000&quot;&gt;{&lt;br /&gt;&lt;img alt=&quot;&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif&quot; /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;(Math.Abs(x)&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;lt;=&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #800080&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;)&lt;br /&gt;&lt;img id=&quot;Codehighlighter1_209_312_Open_Image&quot; onclick=&quot;this.style.display='none'; document.getElementById('Codehighlighter1_209_312_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_209_312_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_209_312_Closed_Text').style.display='inline';&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif&quot;&gt;&lt;img style=&quot;display: none&quot; id=&quot;Codehighlighter1_209_312_Closed_Image&quot; onclick=&quot;this.style.display='none'; document.getElementById('Codehighlighter1_209_312_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_209_312_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_209_312_Open_Text').style.display='inline';&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid&quot; id=&quot;Codehighlighter1_209_312_Closed_Text&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://www.cnblogs.com/Images/dot.gif&quot; /&gt;&lt;/span&gt;&lt;span id=&quot;Codehighlighter1_209_312_Open_Text&quot;&gt;&lt;span style=&quot;color: #000000&quot;&gt;{&lt;br /&gt;&lt;img alt=&quot;&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif&quot; /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;firstPointTime&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;DateTimeEx.Now;&lt;br /&gt;&lt;img alt=&quot;&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif&quot; /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;state&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #800080&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;;&lt;br /&gt;&lt;img alt=&quot;&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif&quot; /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;&lt;img alt=&quot;&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif&quot; /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;&lt;img alt=&quot;&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif&quot; /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;(state&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #800080&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;)&lt;br /&gt;&lt;img id=&quot;Codehighlighter1_372_1015_Open_Image&quot; onclick=&quot;this.style.display='none'; document.getElementById('Codehighlighter1_372_1015_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_372_1015_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_372_1015_Closed_Text').style.display='inline';&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif&quot;&gt;&lt;img style=&quot;display: none&quot; id=&quot;Codehighlighter1_372_1015_Closed_Image&quot; onclick=&quot;this.style.display='none'; document.getElementById('Codehighlighter1_372_1015_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_372_1015_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_372_1015_Open_Text').style.display='inline';&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid&quot; id=&quot;Codehighlighter1_372_1015_Closed_Text&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://www.cnblogs.com/Images/dot.gif&quot; /&gt;&lt;/span&gt;&lt;span id=&quot;Codehighlighter1_372_1015_Open_Text&quot;&gt;&lt;span style=&quot;color: #000000&quot;&gt;{&lt;br /&gt;&lt;img alt=&quot;&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif&quot; /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;(Math.Abs(x)&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;gt;=&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #800080&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;Math.Abs(x)&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;lt;=&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #800080&quot;&gt;15&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;)&lt;br /&gt;&lt;img id=&quot;Codehighlighter1_449_1001_Open_Image&quot; onclick=&quot;this.style.display='none'; document.getElementById('Codehighlighter1_449_1001_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_449_1001_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_449_1001_Closed_Text').style.display='inline';&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif&quot;&gt;&lt;img style=&quot;display: none&quot; id=&quot;Codehighlighter1_449_1001_Closed_Image&quot; onclick=&quot;this.style.display='none'; document.getElementById('Codehighlighter1_449_1001_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_449_1001_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_449_1001_Open_Text').style.display='inline';&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid&quot; id=&quot;Codehighlighter1_449_1001_Closed_Text&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://www.cnblogs.com/Images/dot.gif&quot; /&gt;&lt;/span&gt;&lt;span id=&quot;Codehighlighter1_449_1001_Open_Text&quot;&gt;&lt;span style=&quot;color: #000000&quot;&gt;{&lt;br /&gt;&lt;img alt=&quot;&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif&quot; /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;secondPointTime&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;DateTimeEx.Now;&lt;br /&gt;&lt;img alt=&quot;&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif&quot; /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;span&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;(secondPointTime&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;firstPointTime).Milliseconds;&lt;br /&gt;&lt;img alt=&quot;&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif&quot; /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;(span&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;gt;=&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;SPAN_MIN&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;span&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;lt;=&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;SPAN_MAX)&lt;br /&gt;&lt;img id=&quot;Codehighlighter1_667_952_Open_Image&quot; onclick=&quot;this.style.display='none'; document.getElementById('Codehighlighter1_667_952_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_667_952_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_667_952_Closed_Text').style.display='inline';&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif&quot;&gt;&lt;img style=&quot;display: none&quot; id=&quot;Codehighlighter1_667_952_Closed_Image&quot; onclick=&quot;this.style.display='none'; document.getElementById('Codehighlighter1_667_952_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_667_952_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_667_952_Open_Text').style.display='inline';&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid&quot; id=&quot;Codehighlighter1_667_952_Closed_Text&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://www.cnblogs.com/Images/dot.gif&quot; /&gt;&lt;/span&gt;&lt;span id=&quot;Codehighlighter1_667_952_Open_Text&quot;&gt;&lt;span style=&quot;color: #000000&quot;&gt;{&lt;br /&gt;&lt;img alt=&quot;&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif&quot; /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;(x&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #800080&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;ShackLeft&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;)&lt;br /&gt;&lt;img alt=&quot;&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif&quot; /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ShackLeft(&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;&amp;nbsp;notify&amp;nbsp;shack&amp;nbsp;left&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;&lt;br /&gt;&lt;img alt=&quot;&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif&quot; /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;(x&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #800080&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;ShackRight&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;)&lt;br /&gt;&lt;img alt=&quot;&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif&quot; /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ShackRight(&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;&amp;nbsp;notify&amp;nbsp;shack&amp;nbsp;right&lt;/span&gt;&lt;span style=&quot;color: #008000&quot;&gt;&lt;br /&gt;&lt;img alt=&quot;&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif&quot; /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;&lt;img alt=&quot;&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif&quot; /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;state&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #800080&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;;&lt;br /&gt;&lt;img alt=&quot;&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif&quot; /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;&lt;img alt=&quot;&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif&quot; /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;br /&gt;&lt;img alt=&quot;&quot; align=&quot;top&quot; src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif&quot; /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;小结&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;这里,我们结合 G-Sensor 来完成对一个工具条的控制，比较新颖，控制起来也比普通的模式有乐趣。手势判断比较简单，也可以自己分析数据，再写一个不同的手势处理，比如甩两下，就触发某一动作。&lt;/p&gt;
&lt;p&gt;示例代码：&lt;a href=&quot;http://files.cnblogs.com/Doho/WMDemo.rar&quot; target=&quot;_blank&quot;&gt;WMToolbox&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;img src=&quot;http://www.cnblogs.com/Doho/aggbug/1596732.html?type=1&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;/&gt;&lt;p&gt;评论: 3　&lt;a href=&quot;http://www.cnblogs.com/Doho/archive/2009/11/05/1596732.html#pagedcomment&quot; target=&quot;_blank&quot;&gt;查看评论&lt;/a&gt;　&lt;a href=&quot;http://www.cnblogs.com/Doho/archive/2009/11/05/1596732.html#commentform&quot; target=&quot;_blank&quot;&gt;发表评论&lt;/a&gt;&lt;/p&gt;&lt;hr/&gt;&lt;p&gt;最新新闻：&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56793/&quot; target=&quot;_blank&quot;&gt;知名扩展 Firebug 的简化版登陆 Chrome&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:59)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56792/&quot; target=&quot;_blank&quot;&gt;Google 悄悄地启用 1e100.net，打枪地不要&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:57)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56791/&quot; target=&quot;_blank&quot;&gt;从 Google 代码库找到的好东西&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:46)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56789/&quot; target=&quot;_blank&quot;&gt;苹果在线商店临时关闭 或将推新Macbook&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:39)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56788/&quot; target=&quot;_blank&quot;&gt;豆瓣网推出豆瓣电台iPhone客户端&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 21:51)&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;编辑推荐：&lt;a href=&quot;http://news.cnblogs.com/n/56782/&quot; target=&quot;_blank&quot;&gt;2010年2月编程语言排行榜&lt;/a&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;网站导航：&lt;a href=&quot;http://www.cnblogs.com&quot; target=&quot;_blank&quot;&gt;博客园首页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/&quot; target=&quot;_blank&quot;&gt;个人主页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://news.cnblogs.com&quot; target=&quot;_blank&quot;&gt;新闻&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/ing/&quot; target=&quot;_blank&quot;&gt;闪存&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/group/&quot; target=&quot;_blank&quot;&gt;小组&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com/q/&quot; target=&quot;_blank&quot;&gt;博问&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com&quot; target=&quot;_blank&quot;&gt;社区&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://kb.cnblogs.com&quot; target=&quot;_blank&quot;&gt;知识库&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/330758564/doho/feedsky/s.gif?r=http://www.cnblogs.com/Doho/archive/2009/11/05/1596732.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/doho/330758564/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/doho/330758564/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Thu, 05 Nov 2009 15:53:00 +0800</pubDate><author>Doho</author><guid isPermaLink="false">http://www.cnblogs.com/Doho/archive/2009/11/05/1596732.html</guid><dc:creator>Doho</dc:creator><fs:srclink>http://www.cnblogs.com/Doho/archive/2009/11/05/1596732.html</fs:srclink><fs:srcfeed>http://www.cnblogs.com/Doho/rss.aspx</fs:srcfeed><fs:itemid>feedsky/doho/~1223974/330758564/1225823</fs:itemid></item><item><title>【推荐】《精通.NET互操作:P/Invoke,C++ Interop和COM Interop》</title><link>http://www.cnblogs.com/Doho/archive/2009/04/27/1444711.html</link><description>&lt;p&gt;阅读: 235 评论: 1 作者: &lt;a href=&quot;http://www.cnblogs.com/Doho/&quot; target=&quot;_blank&quot;&gt;Doho&lt;/a&gt; 发表于 2009-04-27 16:43 &lt;a href=&quot;http://www.cnblogs.com/Doho/archive/2009/04/27/1444711.html&quot; target=&quot;_blank&quot;&gt;原文链接&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;---如果&lt;/strong&gt;你想知道Windows平台上的托管代码与非托管代码之间如何互操作&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;---如果&lt;/strong&gt;你想知道.NET平台提供的各种互操作方法&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;---如果&lt;/strong&gt;你想知道C++ Interop、COM Interop&lt;/p&gt;  &lt;p&gt;---&lt;strong&gt;那么&lt;/strong&gt;：你应该参考《精通.NET互操作:P/Invoke,C++ Interop和COM Interop》&lt;/p&gt;  &lt;p&gt;---&lt;strong&gt;因为&lt;/strong&gt;它是：&lt;/p&gt;  &lt;li&gt;国内首本全面深入介绍.NET互操作技术的参考手册&lt;/li&gt;  &lt;li&gt;系统地介绍针对各种.NET互操作问题的解决方案&lt;/li&gt;  &lt;li&gt;帮助读者掌握.NET互操作过程中的最佳实践&lt;/li&gt;  &lt;p&gt;封面：&lt;/p&gt;  &lt;p&gt;&lt;img border=&quot;1&quot; alt=&quot;&quot; src=&quot;http://sites.google.com/site/netinterop/_/rsrc/1238665375250/Home/Book_Cover_final-small.jpg&quot; /&gt;&lt;/p&gt;  &lt;li&gt;书号：978-7-115-20434-9&lt;/li&gt;  &lt;li&gt;作者：黄际洲&amp;#160;&amp;#160;&amp;#160; 崔晓源&lt;/li&gt;  &lt;li&gt;定价：68元 (以优惠价格在以下网址购买，最低7.5折）&lt;/li&gt;  &lt;li&gt;购买地址：&lt;a href=&quot;http://www.ptpress.com.cn/Book.aspx?id=11892&quot;&gt;人民邮电出版社&lt;/a&gt;，&lt;a href=&quot;http://www.china-pub.com/45607&quot;&gt;China-Pub&lt;/a&gt;，&lt;a href=&quot;http://union.dangdang.com/transfer/transfer.aspx?from=P-263982&amp;amp;backurl=http://product.dangdang.com/product.aspx?product_id=20546679&quot;&gt;当当网（dangdang）&lt;/a&gt;，&lt;a href=&quot;http://www.amazon.cn/mn/detailApp?prodid=bkbk942304&quot;&gt;卓越亚马逊（amazon.cn）&lt;/a&gt;&lt;/li&gt;  &lt;li&gt;官方网址：&lt;a target=&quot;_blank&quot; href=&quot;http://interop123.com/default.aspx&quot;&gt;.NET互操作技术社区&lt;/a&gt;&lt;/li&gt;&lt;img src=&quot;http://www.cnblogs.com/Doho/aggbug/1444711.html?type=1&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;/&gt;&lt;p&gt;评论: 1　&lt;a href=&quot;http://www.cnblogs.com/Doho/archive/2009/04/27/1444711.html#pagedcomment&quot; target=&quot;_blank&quot;&gt;查看评论&lt;/a&gt;　&lt;a href=&quot;http://www.cnblogs.com/Doho/archive/2009/04/27/1444711.html#commentform&quot; target=&quot;_blank&quot;&gt;发表评论&lt;/a&gt;&lt;/p&gt;&lt;hr/&gt;&lt;p&gt;最新新闻：&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56793/&quot; target=&quot;_blank&quot;&gt;知名扩展 Firebug 的简化版登陆 Chrome&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:59)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56792/&quot; target=&quot;_blank&quot;&gt;Google 悄悄地启用 1e100.net，打枪地不要&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:57)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56791/&quot; target=&quot;_blank&quot;&gt;从 Google 代码库找到的好东西&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:46)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56789/&quot; target=&quot;_blank&quot;&gt;苹果在线商店临时关闭 或将推新Macbook&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:39)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56788/&quot; target=&quot;_blank&quot;&gt;豆瓣网推出豆瓣电台iPhone客户端&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 21:51)&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;编辑推荐：&lt;a href=&quot;http://news.cnblogs.com/n/56782/&quot; target=&quot;_blank&quot;&gt;2010年2月编程语言排行榜&lt;/a&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;网站导航：&lt;a href=&quot;http://www.cnblogs.com&quot; target=&quot;_blank&quot;&gt;博客园首页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/&quot; target=&quot;_blank&quot;&gt;个人主页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://news.cnblogs.com&quot; target=&quot;_blank&quot;&gt;新闻&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/ing/&quot; target=&quot;_blank&quot;&gt;闪存&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/group/&quot; target=&quot;_blank&quot;&gt;小组&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com/q/&quot; target=&quot;_blank&quot;&gt;博问&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com&quot; target=&quot;_blank&quot;&gt;社区&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://kb.cnblogs.com&quot; target=&quot;_blank&quot;&gt;知识库&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/doho/330759021/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/doho/330759021/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Mon, 27 Apr 2009 16:43:00 +0800</pubDate><author>Doho</author><guid isPermaLink="false">http://www.cnblogs.com/Doho/archive/2009/04/27/1444711.html</guid><dc:creator>Doho</dc:creator><fs:srclink>http://www.cnblogs.com/Doho/archive/2009/04/27/1444711.html</fs:srclink><fs:srcfeed>http://www.cnblogs.com/Doho/rss.aspx</fs:srcfeed><fs:itemid>feedsky/doho/~1223974/330759021/1225823</fs:itemid></item><item><title>荣获“微软精英大挑战”一等奖</title><link>http://www.cnblogs.com/Doho/archive/2009/04/26/1443841.html</link><description>&lt;p&gt;阅读: 2146 评论: 35 作者: &lt;a href=&quot;http://www.cnblogs.com/Doho/&quot; target=&quot;_blank&quot;&gt;Doho&lt;/a&gt; 发表于 2009-04-26 11:54 &lt;a href=&quot;http://www.cnblogs.com/Doho/archive/2009/04/26/1443841.html&quot; target=&quot;_blank&quot;&gt;原文链接&lt;/a&gt;&lt;/p&gt;&lt;blockquote&gt;
&lt;p&gt;此次参加的&amp;#8220;微软精英大挑战&amp;#8221;，来自&lt;strong&gt;重庆大学&lt;/strong&gt;微软技术俱乐部&lt;strong&gt;&lt;em&gt;DreamHome&lt;/em&gt;&lt;/strong&gt;团队的《梦想家园》作品荣获一等奖。微软全球CTO &lt;strong&gt;Craig Mundie&lt;/strong&gt;先生给重庆大学代表队颁奖：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://images.cnblogs.com/cnblogs_com/Doho/WindowsLiveWriter/ce8ce96919b0_A4F2/DSC02796.jpg&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;Craig Mundie先生给重庆大学代表队颁奖&quot; border=&quot;0&quot; alt=&quot;Craig Mundie先生给重庆大学代表队颁奖&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/Doho/WindowsLiveWriter/ce8ce96919b0_A4F2/DSC02796_thumb.jpg&quot; width=&quot;644&quot; height=&quot;484&quot; /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;我们的团队：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://images.cnblogs.com/cnblogs_com/Doho/WindowsLiveWriter/ce8ce96919b0_A4F2/DSC02865.jpg&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;重庆大学微软技术俱乐部DreamHome团队&quot; border=&quot;0&quot; alt=&quot;重庆大学微软技术俱乐部DreamHome团队&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/Doho/WindowsLiveWriter/ce8ce96919b0_A4F2/DSC02865_thumb.jpg&quot; width=&quot;580&quot; height=&quot;772&quot; /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://images.cnblogs.com/cnblogs_com/Doho/WindowsLiveWriter/ce8ce96919b0_A4F2/s_2.jpg&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;img src=&quot;http://www.cnblogs.com/Doho/aggbug/1443841.html?type=1&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;/&gt;&lt;p&gt;评论: 35　&lt;a href=&quot;http://www.cnblogs.com/Doho/archive/2009/04/26/1443841.html#pagedcomment&quot; target=&quot;_blank&quot;&gt;查看评论&lt;/a&gt;　&lt;a href=&quot;http://www.cnblogs.com/Doho/archive/2009/04/26/1443841.html#commentform&quot; target=&quot;_blank&quot;&gt;发表评论&lt;/a&gt;&lt;/p&gt;&lt;hr/&gt;&lt;p&gt;最新新闻：&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56793/&quot; target=&quot;_blank&quot;&gt;知名扩展 Firebug 的简化版登陆 Chrome&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:59)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56792/&quot; target=&quot;_blank&quot;&gt;Google 悄悄地启用 1e100.net，打枪地不要&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:57)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56791/&quot; target=&quot;_blank&quot;&gt;从 Google 代码库找到的好东西&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:46)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56789/&quot; target=&quot;_blank&quot;&gt;苹果在线商店临时关闭 或将推新Macbook&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:39)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56788/&quot; target=&quot;_blank&quot;&gt;豆瓣网推出豆瓣电台iPhone客户端&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 21:51)&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;编辑推荐：&lt;a href=&quot;http://news.cnblogs.com/n/56782/&quot; target=&quot;_blank&quot;&gt;2010年2月编程语言排行榜&lt;/a&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;网站导航：&lt;a href=&quot;http://www.cnblogs.com&quot; target=&quot;_blank&quot;&gt;博客园首页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/&quot; target=&quot;_blank&quot;&gt;个人主页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://news.cnblogs.com&quot; target=&quot;_blank&quot;&gt;新闻&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/ing/&quot; target=&quot;_blank&quot;&gt;闪存&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/group/&quot; target=&quot;_blank&quot;&gt;小组&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com/q/&quot; target=&quot;_blank&quot;&gt;博问&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com&quot; target=&quot;_blank&quot;&gt;社区&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://kb.cnblogs.com&quot; target=&quot;_blank&quot;&gt;知识库&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/doho/330759143/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/doho/330759143/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Sun, 26 Apr 2009 11:54:00 +0800</pubDate><author>Doho</author><guid isPermaLink="false">http://www.cnblogs.com/Doho/archive/2009/04/26/1443841.html</guid><dc:creator>Doho</dc:creator><fs:srclink>http://www.cnblogs.com/Doho/archive/2009/04/26/1443841.html</fs:srclink><fs:srcfeed>http://www.cnblogs.com/Doho/rss.aspx</fs:srcfeed><fs:itemid>feedsky/doho/~1223974/330759143/1225823</fs:itemid></item><item><title>[推荐]美名腾Beta版</title><link>http://www.cnblogs.com/Doho/archive/2009/03/17/1414106.html</link><description>&lt;p&gt;阅读: 738 评论: 6 作者: &lt;a href=&quot;http://www.cnblogs.com/Doho/&quot; target=&quot;_blank&quot;&gt;Doho&lt;/a&gt; 发表于 2009-03-17 11:25 &lt;a href=&quot;http://www.cnblogs.com/Doho/archive/2009/03/17/1414106.html&quot; target=&quot;_blank&quot;&gt;原文链接&lt;/a&gt;&lt;/p&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 想破解自己的名字吗？想给宝宝起名字吗？想给公司、产品起名吗？想拥有一个超酷的网名吗？想起一个超酷的英文名字吗？推荐给你一个好的起名网站《&lt;A target=_blank href=&quot;http://www.meimingteng.com&quot;&gt;美名腾&lt;/A&gt;》。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;A target=_blank href=&quot;http://www.meimingteng.com&quot;&gt;美名腾&lt;/A&gt;给了我们一个怎么样的惊喜呢？：&lt;/P&gt;
&lt;UL&gt;
&lt;UL&gt;
&lt;LI&gt;六度空间宝宝起名 
&lt;LI&gt;全方位人名解析 
&lt;LI&gt;公司、产品、店铺起名 
&lt;LI&gt;起超酷小名、昵称、英文名 
&lt;LI&gt;老外起名、外国品牌起名 &lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 美名腾起名系统震撼发布！现在，起名字不再那么难啦，赶快试一试吧！ &lt;FONT size=4&gt;&lt;STRONG&gt;&lt;A target=_blank href=&quot;http://www.meimingteng.com/&quot;&gt;我的名字，我做主！&lt;/A&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src=&quot;http://www.cnblogs.com/Doho/aggbug/1414106.html?type=1&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;/&gt;&lt;p&gt;评论: 6　&lt;a href=&quot;http://www.cnblogs.com/Doho/archive/2009/03/17/1414106.html#pagedcomment&quot; target=&quot;_blank&quot;&gt;查看评论&lt;/a&gt;　&lt;a href=&quot;http://www.cnblogs.com/Doho/archive/2009/03/17/1414106.html#commentform&quot; target=&quot;_blank&quot;&gt;发表评论&lt;/a&gt;&lt;/p&gt;&lt;hr/&gt;&lt;p&gt;最新新闻：&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56793/&quot; target=&quot;_blank&quot;&gt;知名扩展 Firebug 的简化版登陆 Chrome&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:59)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56792/&quot; target=&quot;_blank&quot;&gt;Google 悄悄地启用 1e100.net，打枪地不要&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:57)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56791/&quot; target=&quot;_blank&quot;&gt;从 Google 代码库找到的好东西&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:46)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56789/&quot; target=&quot;_blank&quot;&gt;苹果在线商店临时关闭 或将推新Macbook&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:39)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56788/&quot; target=&quot;_blank&quot;&gt;豆瓣网推出豆瓣电台iPhone客户端&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 21:51)&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;编辑推荐：&lt;a href=&quot;http://news.cnblogs.com/n/56782/&quot; target=&quot;_blank&quot;&gt;2010年2月编程语言排行榜&lt;/a&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;网站导航：&lt;a href=&quot;http://www.cnblogs.com&quot; target=&quot;_blank&quot;&gt;博客园首页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/&quot; target=&quot;_blank&quot;&gt;个人主页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://news.cnblogs.com&quot; target=&quot;_blank&quot;&gt;新闻&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/ing/&quot; target=&quot;_blank&quot;&gt;闪存&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/group/&quot; target=&quot;_blank&quot;&gt;小组&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com/q/&quot; target=&quot;_blank&quot;&gt;博问&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com&quot; target=&quot;_blank&quot;&gt;社区&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://kb.cnblogs.com&quot; target=&quot;_blank&quot;&gt;知识库&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/doho/330759260/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/doho/330759260/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Tue, 17 Mar 2009 11:25:00 +0800</pubDate><author>Doho</author><guid isPermaLink="false">http://www.cnblogs.com/Doho/archive/2009/03/17/1414106.html</guid><dc:creator>Doho</dc:creator><fs:srclink>http://www.cnblogs.com/Doho/archive/2009/03/17/1414106.html</fs:srclink><fs:srcfeed>http://www.cnblogs.com/Doho/rss.aspx</fs:srcfeed><fs:itemid>feedsky/doho/~1223974/330759260/1225823</fs:itemid></item><item><title>[发布]Quartz.NET 示例程序：企业调度器 V0.2 源代码</title><link>http://www.cnblogs.com/Doho/archive/2009/03/17/1414065.html</link><description>&lt;p&gt;阅读: 1865 评论: 9 作者: &lt;a href=&quot;http://www.cnblogs.com/Doho/&quot; target=&quot;_blank&quot;&gt;Doho&lt;/a&gt; 发表于 2009-03-17 10:50 &lt;a href=&quot;http://www.cnblogs.com/Doho/archive/2009/03/17/1414065.html&quot; target=&quot;_blank&quot;&gt;原文链接&lt;/a&gt;&lt;/p&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 企业调度器（EntScheduler） V0.1 源代码在&lt;A href=&quot;http://www.cnblogs.com/Doho/archive/2009/03/15/1412390.html&quot;&gt;Quartz.NET 架构与源代码分析系列 part 3 ：Trigger 触发器&lt;/A&gt; 已经给出，它实现了基本的作业调度、触发。此次的 V0.2 在这基础之上做了如下实现：&lt;/P&gt;
&lt;OL&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;自定义作业扩展&lt;/STRONG&gt;。你可以根据自己的需要开发自己的作业，并把它添加到 EntScheduler 上就可以使用了。 
&lt;LI&gt;&lt;STRONG&gt;新增了触发器配置&lt;/STRONG&gt;。“每周、每月、国际节日”现在可以自由配置了。 &lt;/LI&gt;&lt;/OL&gt;&lt;/OL&gt;
&lt;H2&gt;&lt;STRONG&gt;源码说明&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 图1 是示例程序的解决方案，包括5 个项目：Quart.2008 是 Quartz.NET 的源程序，EntScheduler.Win32 是Windows 下的应用项目，EntScheduler.Extendable 可扩展库，以及两个实现了可扩展库的作业扩展：邮件服务、关机服务。&lt;/P&gt;
&lt;P align=center&gt;&lt;A href=&quot;http://www.cnblogs.com/images/cnblogs_com/Doho/WindowsLiveWriter/Quartz.NETV0.2_8920/image_2.png&quot;&gt;&lt;IMG style=&quot;BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px&quot; title=image border=0 alt=image src=&quot;http://www.cnblogs.com/images/cnblogs_com/Doho/WindowsLiveWriter/Quartz.NETV0.2_8920/image_thumb.png&quot; width=398 height=234&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P align=center&gt;图1 企业调度器示例程序的解决方案图&lt;/P&gt;
&lt;H2&gt;&lt;STRONG&gt;自定义作业扩展&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EntScheduler 可以非常方便地根据自己的&lt;STRONG&gt;需要&lt;/STRONG&gt; 开发自己的作业 &lt;STRONG&gt;扩展&lt;/STRONG&gt;，而且开发扩展也非常方便，只要实现Doho.EntScheduler.Extendable.IExtendedJob 和 Doho.EntScheduler.Extendable.IJobConfigPanel 接口，就可以了。这两个接口定义如下：&lt;/P&gt;
&lt;DIV class=cnblogs_code&gt;&lt;IMG id=Code_Closed_Image_105058 onclick=&quot;this.style.display='none'; document.getElementById('Code_Closed_Text_105058').style.display='none'; document.getElementById('Code_Open_Image_105058').style.display='inline'; document.getElementById('Code_Open_Text_105058').style.display='inline';&quot; align=top src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif&quot; width=11 height=16&gt;&lt;IMG style=&quot;DISPLAY: none&quot; id=Code_Open_Image_105058 onclick=&quot;this.style.display='none'; document.getElementById('Code_Open_Text_105058').style.display='none'; getElementById('Code_Closed_Image_105058').style.display='inline'; getElementById('Code_Closed_Text_105058').style.display='inline';&quot; align=top src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif&quot; width=11 height=16&gt;&lt;SPAN id=Code_Closed_Text_105058 class=cnblogs_code_Collapse&gt;Code&lt;/SPAN&gt;&lt;SPAN style=&quot;DISPLAY: none&quot; id=Code_Open_Text_105058&gt;&lt;BR&gt;&lt;!--&lt;br&gt;&lt;br&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br&gt;http://www.CodeHighlighter.com/&lt;br&gt;&lt;br&gt;--&gt;&lt;SPAN style=&quot;COLOR: #808080&quot;&gt;///&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #808080&quot;&gt;&amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #808080&quot;&gt;///&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;&amp;nbsp;扩展作业继承的接口,该接口继承&amp;nbsp;Quartz.IJob&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #808080&quot;&gt;///&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #808080&quot;&gt;&amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #808080&quot;&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;interface&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;&amp;nbsp;IExtendedJob&amp;nbsp;:&amp;nbsp;IJob&amp;nbsp;&lt;BR&gt;{&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #808080&quot;&gt;///&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #808080&quot;&gt;&amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #808080&quot;&gt;///&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;&amp;nbsp;返回配置面板实例&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #808080&quot;&gt;///&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #808080&quot;&gt;&amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #808080&quot;&gt;///&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #808080&quot;&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #808080&quot;&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UserControl&amp;nbsp;GetConfigPanel();&amp;nbsp;&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #808080&quot;&gt;///&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #808080&quot;&gt;&amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #808080&quot;&gt;///&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;&amp;nbsp;配置面板继承的接口&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #808080&quot;&gt;///&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #808080&quot;&gt;&amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #808080&quot;&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;interface&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;&amp;nbsp;IJobConfigPanel&amp;nbsp;&lt;BR&gt;{&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #808080&quot;&gt;///&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #808080&quot;&gt;&amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #808080&quot;&gt;///&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;&amp;nbsp;返回配置的作业信息:JobDetail&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #808080&quot;&gt;///&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #808080&quot;&gt;&amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #808080&quot;&gt;///&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #808080&quot;&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #808080&quot;&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;JobDetail&amp;nbsp;GetJobDetail();&amp;nbsp;&lt;BR&gt;}&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 详细的扩展定义可以参考“邮件服务、关机服务”项目的代码。&lt;/P&gt;
&lt;H2&gt;&lt;STRONG&gt;下一步实现&lt;/STRONG&gt;&lt;/H2&gt;
&lt;UL&gt;
&lt;LI&gt;停止任务，查看任务的执行情况 
&lt;LI&gt;添加一些实用的作业：定时短信、开机执行任务、关机保存工作窗口（下次开机时自动恢复） 
&lt;LI&gt;农历触发器的实现（非常有用，想一下你是否想过在每年除夕晚上 0:00 前给朋友发送短信、邮件呢，给她一个惊喜！） 
&lt;LI&gt;是否可以结合 &lt;STRONG&gt;飞信 &lt;/STRONG&gt;来实现自动短信功能（每天早上都可以&lt;STRONG&gt;很勤快&lt;/STRONG&gt;地给女朋友发送祝福啦！是不是很&lt;STRONG&gt;惬意？&lt;/STRONG&gt;） &lt;/LI&gt;&lt;/UL&gt;
&lt;H2&gt;&lt;STRONG&gt;源码&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;&lt;A target=_blank href=&quot;http://files.cnblogs.com/Doho/EntSchedulerV0.2.rar&quot;&gt;Quartz.NET 示例程序：企业调度器 V0.2 源代码&lt;/A&gt;&lt;/P&gt;&lt;img src=&quot;http://www.cnblogs.com/Doho/aggbug/1414065.html?type=1&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;/&gt;&lt;p&gt;评论: 9　&lt;a href=&quot;http://www.cnblogs.com/Doho/archive/2009/03/17/1414065.html#pagedcomment&quot; target=&quot;_blank&quot;&gt;查看评论&lt;/a&gt;　&lt;a href=&quot;http://www.cnblogs.com/Doho/archive/2009/03/17/1414065.html#commentform&quot; target=&quot;_blank&quot;&gt;发表评论&lt;/a&gt;&lt;/p&gt;&lt;hr/&gt;&lt;p&gt;最新新闻：&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56793/&quot; target=&quot;_blank&quot;&gt;知名扩展 Firebug 的简化版登陆 Chrome&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:59)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56792/&quot; target=&quot;_blank&quot;&gt;Google 悄悄地启用 1e100.net，打枪地不要&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:57)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56791/&quot; target=&quot;_blank&quot;&gt;从 Google 代码库找到的好东西&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:46)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56789/&quot; target=&quot;_blank&quot;&gt;苹果在线商店临时关闭 或将推新Macbook&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:39)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56788/&quot; target=&quot;_blank&quot;&gt;豆瓣网推出豆瓣电台iPhone客户端&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 21:51)&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;编辑推荐：&lt;a href=&quot;http://news.cnblogs.com/n/56782/&quot; target=&quot;_blank&quot;&gt;2010年2月编程语言排行榜&lt;/a&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;网站导航：&lt;a href=&quot;http://www.cnblogs.com&quot; target=&quot;_blank&quot;&gt;博客园首页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/&quot; target=&quot;_blank&quot;&gt;个人主页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://news.cnblogs.com&quot; target=&quot;_blank&quot;&gt;新闻&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/ing/&quot; target=&quot;_blank&quot;&gt;闪存&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/group/&quot; target=&quot;_blank&quot;&gt;小组&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com/q/&quot; target=&quot;_blank&quot;&gt;博问&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com&quot; target=&quot;_blank&quot;&gt;社区&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://kb.cnblogs.com&quot; target=&quot;_blank&quot;&gt;知识库&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/doho/330759264/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/doho/330759264/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Tue, 17 Mar 2009 10:50:00 +0800</pubDate><author>Doho</author><guid isPermaLink="false">http://www.cnblogs.com/Doho/archive/2009/03/17/1414065.html</guid><dc:creator>Doho</dc:creator><fs:srclink>http://www.cnblogs.com/Doho/archive/2009/03/17/1414065.html</fs:srclink><fs:srcfeed>http://www.cnblogs.com/Doho/rss.aspx</fs:srcfeed><fs:itemid>feedsky/doho/~1223974/330759264/1225823</fs:itemid></item><item><title>Quartz.NET 架构与源代码分析系列 part 3 ：Trigger 触发器</title><link>http://www.cnblogs.com/Doho/archive/2009/03/15/1412390.html</link><description>&lt;p&gt;阅读: 1920 评论: 14 作者: &lt;a href=&quot;http://www.cnblogs.com/Doho/&quot; target=&quot;_blank&quot;&gt;Doho&lt;/a&gt; 发表于 2009-03-15 13:08 &lt;a href=&quot;http://www.cnblogs.com/Doho/archive/2009/03/15/1412390.html&quot; target=&quot;_blank&quot;&gt;原文链接&lt;/a&gt;&lt;/p&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在上一篇《&lt;A href=&quot;http://www.cnblogs.com/Doho/archive/2009/03/12/1410081.html&quot;&gt;Quartz.NET 架构与源代码分析系列 part 2 ：Job 作业&lt;/A&gt;》我们分析了Quartz.NET 的 IJob 继承结构以及Quartz.NET 附带的几个 Job类。现在，我们要介绍 Job 执行的条件，也就是 Trigger 触发器。&lt;/P&gt;
&lt;H2&gt;&lt;STRONG&gt;Trigger 抽象类&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Quartz.NET 有一个 Trigger 抽象类，它有一些重要的方法和参数，已经标在图1 上。&lt;/P&gt;
&lt;DIV align=center&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=2 width=638 align=center&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=200&gt;&lt;A href=&quot;http://www.cnblogs.com/images/cnblogs_com/Doho/WindowsLiveWriter/Quartz.NETpart3Trigger_886B/image_4.png&quot;&gt;&lt;IMG style=&quot;BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px&quot; title=image border=0 alt=image src=&quot;http://www.cnblogs.com/images/cnblogs_com/Doho/WindowsLiveWriter/Quartz.NETpart3Trigger_886B/image_thumb_1.png&quot; width=197 height=432&gt;&lt;/A&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=436&gt;&amp;nbsp;&lt;A href=&quot;http://www.cnblogs.com/images/cnblogs_com/Doho/WindowsLiveWriter/Quartz.NETpart3Trigger_886B/image_6.png&quot;&gt;&lt;IMG style=&quot;BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px&quot; title=image border=0 alt=image src=&quot;http://www.cnblogs.com/images/cnblogs_com/Doho/WindowsLiveWriter/Quartz.NETpart3Trigger_886B/image_thumb_2.png&quot; width=238 height=378&gt;&lt;/A&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;
&lt;P align=center&gt;图1 Trigger 抽象类图&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 从图2 可以看出，Quartz.NET 实现了3个具体的触发器类，SimpleTrigger 简单地在某一时间重复执行多少次，NthIncludedDayTrigger 在每一年、月、周的第几天(Nth)执行作业，CronTrigger 使用 Unix 平台下的'cron-like’表达式来实现非常灵活的触发时间。&lt;/P&gt;
&lt;P align=center&gt;&lt;A href=&quot;http://www.cnblogs.com/images/cnblogs_com/Doho/WindowsLiveWriter/Quartz.NETpart3Trigger_886B/image_2.png&quot;&gt;&lt;IMG style=&quot;BORDER-RIGHT-WIDTH: 0px; DISPLAY: block; FLOAT: none; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: auto; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: auto&quot; title=image border=0 alt=image src=&quot;http://www.cnblogs.com/images/cnblogs_com/Doho/WindowsLiveWriter/Quartz.NETpart3Trigger_886B/image_thumb.png&quot; width=506 height=192&gt;&lt;/A&gt;图2 Trigger 继承结构 &lt;/P&gt;
&lt;H2&gt;&lt;STRONG&gt;SimpleTrigger &lt;/STRONG&gt;&lt;/H2&gt;
&lt;P align=left&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 我们来看一下SimpleTrigger 的构造函数：&lt;/P&gt;
&lt;DIV style=&quot;BORDER-BOTTOM: silver 1px solid; BORDER-LEFT: silver 1px solid; PADDING-BOTTOM: 4px; LINE-HEIGHT: 12pt; BACKGROUND-COLOR: #f4f4f4; MARGIN: 20px 0px 10px; PADDING-LEFT: 4px; WIDTH: 97.5%; PADDING-RIGHT: 4px; FONT-FAMILY: 'Courier New', courier, monospace; MAX-HEIGHT: 200px; FONT-SIZE: 8pt; OVERFLOW: auto; BORDER-TOP: silver 1px solid; CURSOR: text; BORDER-RIGHT: silver 1px solid; PADDING-TOP: 4px&quot; id=codeSnippetWrapper&gt;
&lt;DIV style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot; id=codeSnippet&gt;&lt;PRE style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;/// &amp;lt;param name=&quot;name&quot;&amp;gt;触发器名&amp;lt;/param&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;/// &amp;lt;param name=&quot;group&quot;&amp;gt;触发器组名&amp;lt;/param&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;/// &amp;lt;param name=&quot;jobName&quot;&amp;gt;绑定的任务名&amp;lt;/param&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;/// &amp;lt;param name=&quot;jobGroup&quot;&amp;gt;绑定的任务组名&amp;lt;/param&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;/// &amp;lt;param name=&quot;startTimeUtc&quot;&amp;gt;开始执行时间A &amp;lt;see cref=&quot;DateTime&quot; /&amp;gt; set to the time for the &amp;lt;see cref=&quot;Trigger&quot; /&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;/// to fire.&amp;lt;/param&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;/// &amp;lt;param name=&quot;endTimeUtc&quot;&amp;gt;结束执行时间A &amp;lt;see cref=&quot;DateTime&quot; /&amp;gt; set to the time for the &amp;lt;see cref=&quot;Trigger&quot; /&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;/// to quit repeat firing.&amp;lt;/param&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;/// &amp;lt;param name=&quot;repeatCount&quot;&amp;gt;重复触发次数The number of times for the &amp;lt;see cref=&quot;Trigger&quot; /&amp;gt; to repeat&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;/// firing, use RepeatIndefinitely for unlimited times.&amp;lt;/param&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;/// &amp;lt;param name=&quot;repeatInterval&quot;&amp;gt;触发间隔The time span to pause between the repeat firing.&amp;lt;/param&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/SPAN&gt; SimpleTrigger(&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;string&lt;/SPAN&gt; name, &lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;string&lt;/SPAN&gt; group, &lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;string&lt;/SPAN&gt; jobName, &lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;string&lt;/SPAN&gt; jobGroup, DateTime startTimeUtc,&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;         NullableDateTime endTimeUtc,&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;         &lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;int&lt;/SPAN&gt; repeatCount, TimeSpan repeatInterval)&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;    : &lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;base&lt;/SPAN&gt;(name, group, jobName, jobGroup)&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;{&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;    StartTimeUtc = startTimeUtc;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;    EndTimeUtc = endTimeUtc;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;    RepeatCount = repeatCount;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;    RepeatInterval = repeatInterval;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style=&quot;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px&quot;&gt;}&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P align=left&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 它有一个起始时间和结束时间，起始时间触发器触发，过了结束时间触发器停止触发。时间间隔 Interval，触发次数 RepeatCount。&lt;/P&gt;
&lt;P align=center&gt;&lt;A href=&quot;http://www.cnblogs.com/images/cnblogs_com/Doho/WindowsLiveWriter/Quartz.NETpart3Trigger_886B/sinpleTirgger_2.jpg&quot;&gt;&lt;IMG style=&quot;BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px&quot; title=sinpleTirgger border=0 alt=sinpleTirgger src=&quot;http://www.cnblogs.com/images/cnblogs_com/Doho/WindowsLiveWriter/Quartz.NETpart3Trigger_886B/sinpleTirgger_thumb.jpg&quot; width=664 height=274&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P align=center&gt;图3 SimpleTrigger 触发器工作示例图&lt;/P&gt;
&lt;H2&gt;&lt;STRONG&gt;CronTrigger &lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CronTrigger 使用 UNIX 下的“Cron-like” 表达式，实际上用起来感觉它很像正则表达式，可以匹配任意时间，这是体现它灵活性的地方。它的规则如下：&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Cron 表达式包括以下 7 个字段（1 个可选）&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;秒&amp;nbsp; 分 小时 月内日期 月 周内日期 年（可选）&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;表达式的每个数值域都是一个有最大值和最小值的集合，如：秒域和分钟域的集合是0-59，日期域是1-31，月份域是1-12。注意：秒、分、小时字段是从小到大排序的，这是西方人的习惯，所以在使用的时候要小心，不要颠倒过来。&lt;/P&gt;
&lt;P&gt;允许值及对应表见表1。&lt;/P&gt;
&lt;P align=center&gt;表1. Cron 表达式允许值及对应表&lt;/P&gt;
&lt;DIV align=center&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=2 width=400 align=center&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=133&gt;字段&lt;/TD&gt;
&lt;TD vAlign=top width=150&gt;允许值&lt;/TD&gt;
&lt;TD vAlign=top width=116&gt;允许的特殊字符&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=133&gt;秒&lt;/TD&gt;
&lt;TD vAlign=top width=150&gt;0-59&lt;/TD&gt;
&lt;TD vAlign=top width=116&gt;, - * /&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=133&gt;分&lt;/TD&gt;
&lt;TD vAlign=top width=150&gt;0-59&lt;/TD&gt;
&lt;TD vAlign=top width=116&gt;, - * /&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=133&gt;小时&lt;/TD&gt;
&lt;TD vAlign=top width=150&gt;0-23&lt;/TD&gt;
&lt;TD vAlign=top width=116&gt;, - * /&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=133&gt;月内日期&lt;/TD&gt;
&lt;TD vAlign=top width=150&gt;1-31&lt;/TD&gt;
&lt;TD vAlign=top width=116&gt;, - * ? / L W C&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=133&gt;月&lt;/TD&gt;
&lt;TD vAlign=top width=150&gt;1-12 或者 JAN-DEC&lt;/TD&gt;
&lt;TD vAlign=top width=116&gt;, - * /&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=133&gt;周内日期&lt;/TD&gt;
&lt;TD vAlign=top width=150&gt;1-7 或者 SUN-SAT&lt;/TD&gt;
&lt;TD vAlign=top width=116&gt;, - * ? / L C # &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=133&gt;年（可选）&lt;/TD&gt;
&lt;TD vAlign=top width=150&gt;留空, 1970-2099&lt;/TD&gt;
&lt;TD vAlign=top width=116&gt;, - * / &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;
&lt;DIV align=left&gt;特殊字符意义对应表见表2。&lt;/DIV&gt;
&lt;DIV align=center&gt;&lt;BR&gt;表2. Cron 表达式特殊字符意义对应表&lt;/DIV&gt;
&lt;DIV align=center&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=2 width=646 align=center&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=45&gt;
&lt;P align=left&gt;特殊字符&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=599&gt;
&lt;P align=left&gt;意义&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=45&gt;
&lt;P align=left&gt;*&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=599&gt;
&lt;P align=left&gt;匹配所有的值。如：*在分钟的字段域里表示 每分钟&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=45&gt;
&lt;P align=left&gt;?&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=599&gt;
&lt;P align=left&gt;只在日期域和星期域中使用。它被用来指定“非明确的值”&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=45&gt;
&lt;P align=left&gt;-&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=599&gt;
&lt;P align=left&gt;指定一个范围。如：“10-12”在小时域意味着“10点、11点、12点”&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=45&gt;
&lt;P align=left&gt;,&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=599&gt;
&lt;P align=left&gt;指定几个可选值。如：“MON,WED,FRI”在星期域里表示“星期一、星期三、星期五” &lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=45&gt;
&lt;P align=left&gt;/&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=599&gt;
&lt;P align=left&gt;指定增量。如：“0/15”在秒域意思是没分钟的0，15，30和45秒。“5/15”在分钟域表示没小时的5，20，35和50。符号“*”在“/”前面（如：*/10）等价于0在“/”前面（如：0/10）&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=45&gt;
&lt;P align=left&gt;L&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=599&gt;
&lt;P align=left&gt;表示day-of-month和day-of-week域，但在两个字段中的意思不同，例如day-of-month域中表示一个月的最后一天。如果在day-of-week域表示‘7’或者‘SAT’，如果在day-of-week域中前面加上数字，它表示一个月的最后几天，例如‘6L’就表示一个月的最后一个星期五&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=45&gt;
&lt;P align=left&gt;W&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=599&gt;
&lt;P align=left&gt;只允许日期域出现。这个字符用于指定日期的最近工作日。例如：如果你在日期域中写 “15W”，表示：这个月15号最近的工作日。所以，如果15号是周六，则任务会在14号触发。如果15好是周日，则任务会在周一也就是16号触发。如果是在日期域填写“1W”即使1号是周六，那么任务也只会在下周一，也就是3号触发，“W”字符指定的最近工作日是不能够跨月份的。字符“W”只能配合一个单独的数值使用，不能够是一个数字段，如：1-15W是错误的&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=45&gt;
&lt;P align=left&gt;LW&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=599&gt;
&lt;P align=left&gt;L和W可以在日期域中联合使用，LW表示这个月最后一周的工作日&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=45&gt;
&lt;P align=left&gt;#&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=599&gt;
&lt;P align=left&gt;只允许在星期域中出现。这个字符用于指定本月的某某天。例如：“6#3”表示本月第三周的星期五（6表示星期五，3表示第三周）。“2#1”表示本月第一周的星期一。“4#5”表示第五周的星期三&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=45&gt;
&lt;P align=left&gt;C&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=599&gt;
&lt;P align=left&gt;允许在日期域和星期域出现。这个字符依靠一个指定的“日历”。也就是说这个表达式的值依赖于相关的“日历”的计算结果，如果没有“日历”关联，则等价于所有包含的“日历”。如：日期域是“5C”表示关联“日历”中第一天，或者这个月开始的第一天的后5天。星期域是“1C”表示关联“日历”中第一天，或者星期的第一天的后1天，也就是周日的后一天（周一）&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;
&lt;P&gt;示例：&lt;/P&gt;
&lt;P&gt;&quot;0 0 0 1 1 ?”&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 每年元旦1月1日 0 点触发&lt;/P&gt;
&lt;P&gt;&quot;0 15 10 * * ? *&quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 每天上午10:15触发&amp;nbsp; &lt;BR&gt;&quot;0 15 10 * * ? 2005&quot;&amp;nbsp;&amp;nbsp; 2005年的每天上午10:15触发&lt;/P&gt;
&lt;P&gt;&quot;0 0-5 14 * * ?&quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 每天下午2点到下午2:05期间的每1分钟触发&amp;nbsp; &lt;BR&gt;&quot;0 10,44 14 ? 3 WED&quot;&amp;nbsp; 每年三月的星期三的下午2:10和2:44触发&amp;nbsp; &lt;BR&gt;&quot;0 15 10 ? * MON-FRI&quot; 周一至周五的上午10:15触发&lt;/P&gt;
&lt;P&gt;&quot;0 15 10 ? * 6#3&quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 每月的第三个星期五上午10:15触发&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;H2&gt;&lt;STRONG&gt;应用示例&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 下面是用SimpleTrigger 和 CronTrigger 实现的触发配置面板：&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.cnblogs.com/images/cnblogs_com/Doho/WindowsLiveWriter/Quartz.NETpart3Trigger_886B/image_8.png&quot;&gt;&lt;IMG style=&quot;BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px&quot; title=image border=0 alt=image src=&quot;http://www.cnblogs.com/images/cnblogs_com/Doho/WindowsLiveWriter/Quartz.NETpart3Trigger_886B/image_thumb_3.png&quot; width=523 height=220&gt;&lt;/A&gt; &lt;A href=&quot;http://www.cnblogs.com/images/cnblogs_com/Doho/WindowsLiveWriter/Quartz.NETpart3Trigger_886B/image_10.png&quot;&gt;&lt;IMG style=&quot;BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px&quot; title=image border=0 alt=image src=&quot;http://www.cnblogs.com/images/cnblogs_com/Doho/WindowsLiveWriter/Quartz.NETpart3Trigger_886B/image_thumb_4.png&quot; width=151 height=145&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.cnblogs.com/images/cnblogs_com/Doho/WindowsLiveWriter/Quartz.NETpart3Trigger_886B/image_12.png&quot;&gt;&lt;IMG style=&quot;BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; MARGIN-LEFT: 0px; BORDER-TOP: 0px; MARGIN-RIGHT: 0px; BORDER-RIGHT: 0px&quot; title=image border=0 alt=image src=&quot;http://www.cnblogs.com/images/cnblogs_com/Doho/WindowsLiveWriter/Quartz.NETpart3Trigger_886B/image_thumb_5.png&quot; width=582 height=354&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;&lt;STRONG&gt;代码下载：&lt;A title=QuartzExampleWin32_Source.rar href=&quot;http://files.cnblogs.com/Doho/QuartzExampleWin32.rar&quot;&gt;QuartzExampleWin32_Source.rar&lt;/A&gt;&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;下一篇，我们将要介绍：Schedule 调度器&lt;/P&gt;
&lt;H2&gt;&lt;STRONG&gt;参考文章&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;1.&lt;A target=_blank href=&quot;http://quartznet.sourceforge.net/tutorial/index.html&quot;&gt;The Official Quartz.NET Tutorial&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;2.&lt;A href=&quot;http://biaoming.javaeye.com/blog/39532&quot;&gt;Quartz的cron表达式&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;目录：&amp;nbsp;&amp;nbsp; &lt;A href=&quot;http://www.cnblogs.com/Doho/archive/2009/03/11/1408601.html&quot;&gt;Quartz.NET 架构与源代码分析系列&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;上一篇：&lt;A href=&quot;http://www.cnblogs.com/Doho/archive/2009/03/12/1410081.html&quot;&gt;Quartz.NET 架构与源代码分析系列 part 2 ：Job 作业&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;下一篇：Quartz.NET 架构与源代码分析系列 part 4&amp;nbsp; ：Schedule 调度器&lt;/P&gt;&lt;img src=&quot;http://www.cnblogs.com/Doho/aggbug/1412390.html?type=1&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;/&gt;&lt;p&gt;评论: 14　&lt;a href=&quot;http://www.cnblogs.com/Doho/archive/2009/03/15/1412390.html#pagedcomment&quot; target=&quot;_blank&quot;&gt;查看评论&lt;/a&gt;　&lt;a href=&quot;http://www.cnblogs.com/Doho/archive/2009/03/15/1412390.html#commentform&quot; target=&quot;_blank&quot;&gt;发表评论&lt;/a&gt;&lt;/p&gt;&lt;hr/&gt;&lt;p&gt;最新新闻：&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56793/&quot; target=&quot;_blank&quot;&gt;知名扩展 Firebug 的简化版登陆 Chrome&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:59)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56792/&quot; target=&quot;_blank&quot;&gt;Google 悄悄地启用 1e100.net，打枪地不要&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:57)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56791/&quot; target=&quot;_blank&quot;&gt;从 Google 代码库找到的好东西&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:46)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56789/&quot; target=&quot;_blank&quot;&gt;苹果在线商店临时关闭 或将推新Macbook&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:39)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56788/&quot; target=&quot;_blank&quot;&gt;豆瓣网推出豆瓣电台iPhone客户端&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 21:51)&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;编辑推荐：&lt;a href=&quot;http://news.cnblogs.com/n/56782/&quot; target=&quot;_blank&quot;&gt;2010年2月编程语言排行榜&lt;/a&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;网站导航：&lt;a href=&quot;http://www.cnblogs.com&quot; target=&quot;_blank&quot;&gt;博客园首页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/&quot; target=&quot;_blank&quot;&gt;个人主页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://news.cnblogs.com&quot; target=&quot;_blank&quot;&gt;新闻&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/ing/&quot; target=&quot;_blank&quot;&gt;闪存&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/group/&quot; target=&quot;_blank&quot;&gt;小组&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com/q/&quot; target=&quot;_blank&quot;&gt;博问&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com&quot; target=&quot;_blank&quot;&gt;社区&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://kb.cnblogs.com&quot; target=&quot;_blank&quot;&gt;知识库&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/doho/330759274/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/doho/330759274/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Sun, 15 Mar 2009 13:08:00 +0800</pubDate><author>Doho</author><guid isPermaLink="false">http://www.cnblogs.com/Doho/archive/2009/03/15/1412390.html</guid><dc:creator>Doho</dc:creator><fs:srclink>http://www.cnblogs.com/Doho/archive/2009/03/15/1412390.html</fs:srclink><fs:srcfeed>http://www.cnblogs.com/Doho/rss.aspx</fs:srcfeed><fs:itemid>feedsky/doho/~1223974/330759274/1225823</fs:itemid></item><item><title>Quartz.NET 架构与源代码分析系列 part 2 ：Job 作业</title><link>http://www.cnblogs.com/Doho/archive/2009/03/12/1410081.html</link><description>&lt;p&gt;阅读: 2034 评论: 3 作者: &lt;a href=&quot;http://www.cnblogs.com/Doho/&quot; target=&quot;_blank&quot;&gt;Doho&lt;/a&gt; 发表于 2009-03-12 23:30 &lt;a href=&quot;http://www.cnblogs.com/Doho/archive/2009/03/12/1410081.html&quot; target=&quot;_blank&quot;&gt;原文链接&lt;/a&gt;&lt;/p&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在上一篇&lt;A href=&quot;http://www.cnblogs.com/Doho/archive/2009/03/11/1408886.html&quot;&gt;Quartz.NET 架构与源代码分析系列 part 1 ：Quartz.NET 入门&lt;/A&gt;我们介绍了Quartz.NET 的基本知识和简单的应用，可以看出来它的使用是非常简单的，只要短短的几行代码就可以在自己的应用程序嵌入强大的作业调度功能。图1是调度器的原理示意图。&lt;/P&gt;
&lt;P align=center&gt;&lt;A href=&quot;http://www.cnblogs.com/images/cnblogs_com/Doho/WindowsLiveWriter/Quartz.NETpart1Job_F156/image_4.png&quot;&gt;&lt;IMG style=&quot;BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px&quot; title=image border=0 alt=image src=&quot;http://www.cnblogs.com/images/cnblogs_com/Doho/WindowsLiveWriter/Quartz.NETpart1Job_F156/image_thumb_1.png&quot; width=418 height=260&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P align=center&gt;图1 调度器的原理示意图&lt;/P&gt;
&lt;P align=center&gt;&amp;nbsp;&lt;/P&gt;
&lt;P align=left&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 从图1可以看出，作业流程是在调度器的统一调度下完成的，它可以调度多个作业，触发器提供作业执行的条件（每天 8:00 am），触发器与作业关联，它们是 1:N 的关系，1个触发器可以关联1个或多个作业。&lt;/P&gt;
&lt;H2&gt;&lt;STRONG&gt;附带的作业&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 我们知道要实现自己的作业功能只要继承 IJob 接口并实现 Execute(JobExecutionContext context) 方法，再把它添加到调度器，调度器会调用执行Execute(JobExecutionContext context) 方法。调用期间，调度器会跟踪作业和它们的执行次数。Quartz.NET 默认提供了 FileScanJob 监视某个文件是否被修改，NativeJob 执行指定程序，NoOpJob 空操作用来给系统调用 ITriggerListener 、IJobListener ，以及 SendMailJob 邮件发送作业。&lt;/P&gt;
&lt;H2&gt;&lt;STRONG&gt;作业执行上下文&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 作业执行上下文由 JobExecutionContext 类实现，它的类图如图2所示。&lt;BR&gt;&lt;BR&gt;&lt;/P&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P align=center&gt;&lt;A href=&quot;http://www.cnblogs.com/images/cnblogs_com/Doho/WindowsLiveWriter/Quartz.NETpart1Job_F156/image_5.png&quot;&gt;&lt;IMG style=&quot;BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; MARGIN-LEFT: 0px; BORDER-TOP: 0px; MARGIN-RIGHT: 0px; BORDER-RIGHT: 0px&quot; title=image border=0 alt=image src=&quot;http://www.cnblogs.com/images/cnblogs_com/Doho/WindowsLiveWriter/Quartz.NETpart1Job_F156/image_thumb.png&quot; width=206 height=502&gt;&lt;/A&gt;&lt;BR&gt;图2 JobExecutionContext 类图&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;
&lt;TD&gt;
&lt;P align=center&gt;&lt;A href=&quot;http://www.cnblogs.com/images/cnblogs_com/Doho/WindowsLiveWriter/Quartz.NETpart1Job_F156/image_7.png&quot;&gt;&lt;IMG style=&quot;BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; WIDTH: 318px; DISPLAY: inline; HEIGHT: 307px; BORDER-TOP: 0px; BORDER-RIGHT: 0px&quot; title=image border=0 alt=image src=&quot;http://www.cnblogs.com/images/cnblogs_com/Doho/WindowsLiveWriter/Quartz.NETpart1Job_F156/image_thumb_2.png&quot; width=511 height=375&gt;&lt;/A&gt;&lt;BR&gt;图3 JobDataMap 继承图&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P align=left&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 它有一个存储作业执行时数据的重要属性：MergedJobDataMap，它是 JobDataMap 类型，也可以使用 JobExecutionContext.JobDetail.JobDataMap 来获得 JobDataMap 对象的引用。作为传递参数的容器，JobDataMap 间接继承了 DirtyFlagMap，DirtyFlagMap 内嵌了 Hashtable 容器，它有一组数据读写方法。可以使用 Visual Studio 的类图来查看。&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;H2&gt;&lt;STRONG&gt;有状态与无状态的作业&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 以上我们的作业实例都是从 IJob 继承，Quartz.NET 里还有 IStatefulJob 、IInterruptableJob，它的声明方式为：&lt;/P&gt;
&lt;DIV class=cnblogs_code&gt;&lt;IMG id=Code_Closed_Image_093217 onclick=&quot;this.style.display='none'; document.getElementById('Code_Closed_Text_093217').style.display='none'; document.getElementById('Code_Open_Image_093217').style.display='inline'; document.getElementById('Code_Open_Text_093217').style.display='inline';&quot; align=top src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif&quot; width=11 height=16&gt;&lt;IMG style=&quot;DISPLAY: none&quot; id=Code_Open_Image_093217 onclick=&quot;this.style.display='none'; document.getElementById('Code_Open_Text_093217').style.display='none'; getElementById('Code_Closed_Image_093217').style.display='inline'; getElementById('Code_Closed_Text_093217').style.display='inline';&quot; align=top src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif&quot; width=11 height=16&gt;&lt;SPAN id=Code_Closed_Text_093217 class=cnblogs_code_Collapse&gt;Code&lt;/SPAN&gt;&lt;SPAN style=&quot;DISPLAY: none&quot; id=Code_Open_Text_093217&gt;&lt;BR&gt;&lt;!--&lt;br&gt;&lt;br&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br&gt;http://www.CodeHighlighter.com/&lt;br&gt;&lt;br&gt;--&gt;&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;interface&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;&amp;nbsp;IStatefulJob&amp;nbsp;:&amp;nbsp;IJob&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;interface&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;&amp;nbsp;IInterruptableJob&amp;nbsp;:&amp;nbsp;IJob&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;void&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;&amp;nbsp;Interrupt();&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IInterruptableJob 接口提供了一个中断方法，但是 IStatefulJob 没有自己的方法。从 Quartz.NET 官方了解到：&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;一个 Job 实例可以被定义为“有状态的”或者“无状态的”。在执行无状态的任务过程中任何对 JobDataMap 所作的更改都将丢失。有状态的任务恰好相反，它在任务的每次执行之后重新存储 JobDataMap 。有状态任务的一个缺点就是它不能并发执行。也就是说，如果任务有状态，那么当触发器试图触发它，触发器就会被阻塞直到前面的执行完成。想使任务有状态，它就要实现 IStatefulJob 接口而不是实现IJob接口。&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 从上面可以知道 IStatefulJob 应该有管理 JobDataMap 的方法，但这个接口在 Quartz.NET 1.0 版本还没有实现。预计在以后的版本应该会加强这个功能的。&lt;/P&gt;
&lt;H2&gt;&lt;STRONG&gt;示例效果&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;&lt;A href=&quot;http://www.cnblogs.com/images/cnblogs_com/Doho/WindowsLiveWriter/Quartz.NETpart1Job_F156/image_9.png&quot;&gt;&lt;IMG style=&quot;BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px&quot; title=image border=0 alt=image src=&quot;http://www.cnblogs.com/images/cnblogs_com/Doho/WindowsLiveWriter/Quartz.NETpart1Job_F156/image_thumb_3.png&quot; width=719 height=520&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P align=center&gt;图4 Quartz.NET 示例图&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 该示例还不够完善，所以源代码没有传上来，计划在下一篇就共享出来。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 下一篇文章我们将进入第3 部分：Trigger 触发器&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;&lt;STRONG&gt;参考文章&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;1.&lt;A target=_blank href=&quot;http://quartznet.sourceforge.net/tutorial/index.html&quot;&gt;The Official Quartz.NET Tutorial&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;2.&lt;A href=&quot;http://www.cnblogs.com/shanyou/archive/2007/08/16/858854.html&quot;&gt;Quartz.net官方开发指南 第三课:更多关于Jobs和JobDetails&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;目录：&amp;nbsp;&amp;nbsp; &lt;A href=&quot;http://www.cnblogs.com/Doho/archive/2009/03/11/1408601.html&quot;&gt;Quartz.NET 架构与源代码分析系列&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;上一篇：&lt;A href=&quot;http://www.cnblogs.com/Doho/archive/2009/03/11/1408886.html&quot;&gt;Quartz.NET 架构与源代码分析系列 part 1 ：Quartz.NET 入门&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;下一篇：&lt;A href=&quot;http://www.cnblogs.com/Doho/archive/2009/03/15/1412390.html&quot;&gt;Quartz.NET 架构与源代码分析系列 part 3 ：Trigger 触发器&lt;/A&gt;&lt;/P&gt;&lt;img src=&quot;http://www.cnblogs.com/Doho/aggbug/1410081.html?type=1&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;/&gt;&lt;p&gt;评论: 3　&lt;a href=&quot;http://www.cnblogs.com/Doho/archive/2009/03/12/1410081.html#pagedcomment&quot; target=&quot;_blank&quot;&gt;查看评论&lt;/a&gt;　&lt;a href=&quot;http://www.cnblogs.com/Doho/archive/2009/03/12/1410081.html#commentform&quot; target=&quot;_blank&quot;&gt;发表评论&lt;/a&gt;&lt;/p&gt;&lt;hr/&gt;&lt;p&gt;最新新闻：&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56793/&quot; target=&quot;_blank&quot;&gt;知名扩展 Firebug 的简化版登陆 Chrome&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:59)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56792/&quot; target=&quot;_blank&quot;&gt;Google 悄悄地启用 1e100.net，打枪地不要&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:57)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56791/&quot; target=&quot;_blank&quot;&gt;从 Google 代码库找到的好东西&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:46)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56789/&quot; target=&quot;_blank&quot;&gt;苹果在线商店临时关闭 或将推新Macbook&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:39)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56788/&quot; target=&quot;_blank&quot;&gt;豆瓣网推出豆瓣电台iPhone客户端&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 21:51)&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;编辑推荐：&lt;a href=&quot;http://news.cnblogs.com/n/56782/&quot; target=&quot;_blank&quot;&gt;2010年2月编程语言排行榜&lt;/a&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;网站导航：&lt;a href=&quot;http://www.cnblogs.com&quot; target=&quot;_blank&quot;&gt;博客园首页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/&quot; target=&quot;_blank&quot;&gt;个人主页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://news.cnblogs.com&quot; target=&quot;_blank&quot;&gt;新闻&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/ing/&quot; target=&quot;_blank&quot;&gt;闪存&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/group/&quot; target=&quot;_blank&quot;&gt;小组&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com/q/&quot; target=&quot;_blank&quot;&gt;博问&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com&quot; target=&quot;_blank&quot;&gt;社区&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://kb.cnblogs.com&quot; target=&quot;_blank&quot;&gt;知识库&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/doho/330759499/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/doho/330759499/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Thu, 12 Mar 2009 23:30:00 +0800</pubDate><author>Doho</author><guid isPermaLink="false">http://www.cnblogs.com/Doho/archive/2009/03/12/1410081.html</guid><dc:creator>Doho</dc:creator><fs:srclink>http://www.cnblogs.com/Doho/archive/2009/03/12/1410081.html</fs:srclink><fs:srcfeed>http://www.cnblogs.com/Doho/rss.aspx</fs:srcfeed><fs:itemid>feedsky/doho/~1223974/330759499/1225823</fs:itemid></item><item><title>Quartz.NET 架构与源代码分析系列 part 1  ：Quartz.NET 入门</title><link>http://www.cnblogs.com/Doho/archive/2009/03/11/1408886.html</link><description>&lt;p&gt;阅读: 2623 评论: 8 作者: &lt;a href=&quot;http://www.cnblogs.com/Doho/&quot; target=&quot;_blank&quot;&gt;Doho&lt;/a&gt; 发表于 2009-03-11 16:48 &lt;a href=&quot;http://www.cnblogs.com/Doho/archive/2009/03/11/1408886.html&quot; target=&quot;_blank&quot;&gt;原文链接&lt;/a&gt;&lt;/p&gt;&lt;H2&gt;&lt;STRONG&gt;概述&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;作业调度的目标在于按照预先确定的时间和指定的顺序来确保高效的数据处理流程，从而最大限度的使用系统资源。批处理流程是一种在无需最终用户干预的方式下在后台通过顺序方式运行的操作。&lt;/P&gt;
&lt;P&gt;Windows XP系统也自带了“任务计划”，它是一个简单任务调度应用，可以在“开始”-&amp;gt;“所有程序”-&amp;gt;“附件”-&amp;gt;“系统工具”-&amp;gt;“任务计划”里找到。如图1;&lt;/P&gt;
&lt;P align=center&gt;&lt;A href=&quot;http://www.cnblogs.com/images/cnblogs_com/Doho/WindowsLiveWriter/Quartz.NET_8BC5/image_2.png&quot;&gt;&lt;IMG style=&quot;BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px&quot; title=image border=0 alt=image src=&quot;http://www.cnblogs.com/images/cnblogs_com/Doho/WindowsLiveWriter/Quartz.NET_8BC5/image_thumb.png&quot; width=400 height=291&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P align=center&gt;图1.Windows 的任务计划 &lt;/P&gt;
&lt;P&gt;Quartz.NET 是一个开源的作业调度框架，它可以被在小型应用程序甚至是企业级的应用程序。它有如下几个特点：&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;API 操作简单，只要几行简单的代码你就可以在应用程序里面实现自己的作业调度，并实时监视作业执行情况 
&lt;LI&gt;触发器功能强大，比 Windows 的任务计划提供更细的触发粒度，你可以使用“Cron表达式（后文将介绍）”来实现如：每周星期一到星期五 8:00am，5:00pm（工作时间） 执行某一件任务 
&lt;LI&gt;良好的可扩展性，它基于接口编程，你可以实现自己的 Schedule 调度器，Job 作业，以及 Trigger 触发器等 
&lt;LI&gt;作业可以保存在 RAM 中，也可以持久化到数据库，支持多种数据库类型：SqlServer、Oracle、MySql等 
&lt;LI&gt;集群，这是一个高级应用，可以在多台计算机之间创建负载平衡、容错处理 &lt;/LI&gt;&lt;/UL&gt;
&lt;H2&gt;&lt;STRONG&gt;使用&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;最新的版本是1.0 正式版，有 Quartz.2008.sln 和 Quartz.Server.2008.sln（分步式应用，将在下面的系列分析） ，用 Visual Studio 2008 打开 Quartz.2008.sln ，方案如图2 所示：&lt;/P&gt;
&lt;P align=center&gt;&lt;A href=&quot;http://www.cnblogs.com/images/cnblogs_com/Doho/WindowsLiveWriter/Quartz.NET_8BC5/image_4.png&quot;&gt;&lt;IMG style=&quot;BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px&quot; title=image border=0 alt=image src=&quot;http://www.cnblogs.com/images/cnblogs_com/Doho/WindowsLiveWriter/Quartz.NET_8BC5/image_thumb_1.png&quot; width=244 height=168&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P align=center&gt;图2. Quartz.NET解决方案&lt;/P&gt;
&lt;P align=left&gt;Quartz.NET是核心的 Quartz 库，它的文件组织结构及作用如图3所示：&lt;/P&gt;
&lt;P align=center&gt;&lt;A href=&quot;http://www.cnblogs.com/images/cnblogs_com/Doho/WindowsLiveWriter/Quartz.NET_8BC5/image_6.png&quot;&gt;&lt;IMG style=&quot;BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px&quot; title=image border=0 alt=image src=&quot;http://www.cnblogs.com/images/cnblogs_com/Doho/WindowsLiveWriter/Quartz.NET_8BC5/image_thumb_2.png&quot; width=270 height=559&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P align=center&gt;图3.Quartz.NET文件组织结构&lt;/P&gt;
&lt;P&gt;Quartz.NET 的文件组织结构并不遵循一定的规范，比如“SPI” 文件夹存放调度器、作业、线程池接口，最外层也放了很多接口，如图3所示。但是大部分都可以直接辨别出来，所以这不会对我们阅读代码造成很大的影响。&lt;/P&gt;
&lt;P&gt;下面是一个 Quartz.NET 的简单例子：&lt;/P&gt;
&lt;DIV class=cnblogs_code&gt;&lt;IMG id=Code_Closed_Image_165306 onclick=&quot;this.style.display='none'; document.getElementById('Code_Closed_Text_165306').style.display='none'; document.getElementById('Code_Open_Image_165306').style.display='inline'; document.getElementById('Code_Open_Text_165306').style.display='inline';&quot; align=top src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif&quot; width=11 height=16&gt;&lt;IMG style=&quot;DISPLAY: none&quot; id=Code_Open_Image_165306 onclick=&quot;this.style.display='none'; document.getElementById('Code_Open_Text_165306').style.display='none'; getElementById('Code_Closed_Image_165306').style.display='inline'; getElementById('Code_Closed_Text_165306').style.display='inline';&quot; align=top src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif&quot; width=11 height=16&gt;&lt;SPAN id=Code_Closed_Text_165306 class=cnblogs_code_Collapse&gt;Code&lt;/SPAN&gt;&lt;SPAN style=&quot;DISPLAY: none&quot; id=Code_Open_Text_165306&gt;&lt;BR&gt;&lt;!--&lt;br&gt;&lt;br&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br&gt;http://www.CodeHighlighter.com/&lt;br&gt;&lt;br&gt;--&gt;&lt;IMG align=top src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/None.gif&quot;&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;//&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;初始化调度器工厂&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;&lt;BR&gt;&lt;IMG align=top src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/None.gif&quot;&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;ISchedulerFactory&amp;nbsp;sf&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;=&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;new&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;&amp;nbsp;StdSchedulerFactory();&amp;nbsp;&lt;BR&gt;&lt;IMG align=top src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/None.gif&quot;&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;//&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;获取默认调度器&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;&lt;BR&gt;&lt;IMG align=top src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/None.gif&quot;&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;IScheduler&amp;nbsp;scheduler&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;=&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;&amp;nbsp;sf.GetScheduler();&amp;nbsp;&lt;BR&gt;&lt;IMG align=top src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/None.gif&quot;&gt;&lt;BR&gt;&lt;IMG align=top src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/None.gif&quot;&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;//&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;作业&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;&lt;BR&gt;&lt;IMG align=top src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/None.gif&quot;&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;JobDetail&amp;nbsp;job&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;=&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;new&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;&amp;nbsp;JobDetail(&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #800000&quot;&gt;&quot;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #800000&quot;&gt;计算作业&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #800000&quot;&gt;&quot;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #800000&quot;&gt;&quot;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #800000&quot;&gt;组1&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #800000&quot;&gt;&quot;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;typeof&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;(Job1));&amp;nbsp;&lt;BR&gt;&lt;IMG align=top src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/None.gif&quot;&gt;&lt;BR&gt;&lt;IMG align=top src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/None.gif&quot;&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;//&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;触发器&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;&lt;BR&gt;&lt;IMG align=top src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/None.gif&quot;&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;SimpleTrigger&amp;nbsp;trigger&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;=&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;new&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;&amp;nbsp;SimpleTrigger(&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #800000&quot;&gt;&quot;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #800000&quot;&gt;触发器1&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #800000&quot;&gt;&quot;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #800000&quot;&gt;&quot;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #800000&quot;&gt;触发器组1&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #800000&quot;&gt;&quot;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #800080&quot;&gt;5&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;new&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;&amp;nbsp;TimeSpan(&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #800080&quot;&gt;0&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #800080&quot;&gt;0&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #800080&quot;&gt;5&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;));&amp;nbsp;&lt;BR&gt;&lt;IMG align=top src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/None.gif&quot;&gt;&lt;BR&gt;&lt;IMG align=top src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/None.gif&quot;&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;//&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;关联任务和触发器&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;&lt;BR&gt;&lt;IMG align=top src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/None.gif&quot;&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;scheduler.ScheduleJob(job,&amp;nbsp;trigger);&amp;nbsp;&lt;BR&gt;&lt;IMG align=top src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/None.gif&quot;&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;//&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;开始任务&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #008000&quot;&gt;&lt;BR&gt;&lt;IMG align=top src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/None.gif&quot;&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;scheduler.Start();&lt;BR&gt;&lt;IMG align=top src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/None.gif&quot;&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;P&gt;首先，我们初始化一个标准的调度器工厂 StdSchedulerFactory ，并用 GetScheduler() 方法创建一个调度器。下一步是声明一个作业对象 JobDetail，它有3 个参数：作业名称、作业组名称、作业的类型。接着，实例化一个 SimpleTrigger 触发器对象，SimpleTrigger 类有6 个构造函数，上面例子的 4 个参数分别为：触发器名称、触发器组名称、循环执行次数、执行间隔。调度器调用 ScheduleJob 方法把作业对象和触发器关联起来，打开触发器就可以开始作业了。&lt;/P&gt;
&lt;P&gt;要执行的作业 Job1 是实现了 IJob 接口的类，IJob 接口只有一个简单的方法：&lt;/P&gt;
&lt;DIV class=cnblogs_code&gt;&lt;IMG id=Code_Closed_Image_165349 onclick=&quot;this.style.display='none'; document.getElementById('Code_Closed_Text_165349').style.display='none'; document.getElementById('Code_Open_Image_165349').style.display='inline'; document.getElementById('Code_Open_Text_165349').style.display='inline';&quot; align=top src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif&quot; width=11 height=16&gt;&lt;IMG style=&quot;DISPLAY: none&quot; id=Code_Open_Image_165349 onclick=&quot;this.style.display='none'; document.getElementById('Code_Open_Text_165349').style.display='none'; getElementById('Code_Closed_Image_165349').style.display='inline'; getElementById('Code_Closed_Text_165349').style.display='inline';&quot; align=top src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif&quot; width=11 height=16&gt;&lt;SPAN id=Code_Closed_Text_165349 class=cnblogs_code_Collapse&gt;Code&lt;/SPAN&gt;&lt;SPAN style=&quot;DISPLAY: none&quot; id=Code_Open_Text_165349&gt;&lt;BR&gt;&lt;!--&lt;br&gt;&lt;br&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br&gt;http://www.CodeHighlighter.com/&lt;br&gt;&lt;br&gt;--&gt;&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;void&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;&amp;nbsp;Execute(JobExecutionContext&amp;nbsp;context)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;P&gt;每一个要执行的作业都要继承 IJob 接口并实现 Execute 方法。&lt;/P&gt;
&lt;P&gt;下面是Job1 的定义：&lt;/P&gt;
&lt;DIV class=cnblogs_code&gt;&lt;IMG id=Code_Closed_Image_165339 onclick=&quot;this.style.display='none'; document.getElementById('Code_Closed_Text_165339').style.display='none'; document.getElementById('Code_Open_Image_165339').style.display='inline'; document.getElementById('Code_Open_Text_165339').style.display='inline';&quot; align=top src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif&quot; width=11 height=16&gt;&lt;IMG style=&quot;DISPLAY: none&quot; id=Code_Open_Image_165339 onclick=&quot;this.style.display='none'; document.getElementById('Code_Open_Text_165339').style.display='none'; getElementById('Code_Closed_Image_165339').style.display='inline'; getElementById('Code_Closed_Text_165339').style.display='inline';&quot; align=top src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif&quot; width=11 height=16&gt;&lt;SPAN id=Code_Closed_Text_165339 class=cnblogs_code_Collapse&gt;Code&lt;/SPAN&gt;&lt;SPAN style=&quot;DISPLAY: none&quot; id=Code_Open_Text_165339&gt;&lt;BR&gt;&lt;!--&lt;br&gt;&lt;br&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br&gt;http://www.CodeHighlighter.com/&lt;br&gt;&lt;br&gt;--&gt;&lt;IMG align=top src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/None.gif&quot;&gt;&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;class&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;&amp;nbsp;Job1&amp;nbsp;:IJob&amp;nbsp;&lt;BR&gt;&lt;IMG id=Codehighlighter1_25_158_Open_Image onclick=&quot;this.style.display='none'; document.getElementById('Codehighlighter1_25_158_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_25_158_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_25_158_Closed_Text').style.display='inline';&quot; align=top src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif&quot;&gt;&lt;IMG style=&quot;DISPLAY: none&quot; id=Codehighlighter1_25_158_Closed_Image onclick=&quot;this.style.display='none'; document.getElementById('Codehighlighter1_25_158_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_25_158_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_25_158_Open_Text').style.display='inline';&quot; align=top src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif&quot;&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid&quot; id=Codehighlighter1_25_158_Closed_Text&gt;&lt;IMG src=&quot;http://www.cnblogs.com/Images/dot.gif&quot;&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_25_158_Open_Text&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;{&amp;nbsp;&lt;BR&gt;&lt;IMG align=top src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;private&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;int&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;&amp;nbsp;i&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;=&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #800080&quot;&gt;0&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;;&amp;nbsp;&lt;BR&gt;&lt;IMG align=top src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;void&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;&amp;nbsp;Execute(JobExecutionContext&amp;nbsp;context)&amp;nbsp;&lt;BR&gt;&lt;IMG id=Codehighlighter1_113_155_Open_Image onclick=&quot;this.style.display='none'; document.getElementById('Codehighlighter1_113_155_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_113_155_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_113_155_Closed_Text').style.display='inline';&quot; align=top src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif&quot;&gt;&lt;IMG style=&quot;DISPLAY: none&quot; id=Codehighlighter1_113_155_Closed_Image onclick=&quot;this.style.display='none'; document.getElementById('Codehighlighter1_113_155_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_113_155_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_113_155_Open_Text').style.display='inline';&quot; align=top src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style=&quot;BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid&quot; id=Codehighlighter1_113_155_Closed_Text&gt;&lt;IMG src=&quot;http://www.cnblogs.com/Images/dot.gif&quot;&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_113_155_Open_Text&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;{&amp;nbsp;&lt;BR&gt;&lt;IMG align=top src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;++&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;i);&amp;nbsp;&lt;BR&gt;&lt;IMG align=top src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: #000000&quot;&gt;&amp;nbsp;&lt;BR&gt;&lt;IMG align=top src=&quot;http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif&quot;&gt;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;P&gt;上面代码的执行结果是连续输出6 个1（重复执行5次，加上第一次执行，一共6 次）。&lt;/P&gt;
&lt;P&gt;下一篇我将要介绍 Job 作业。&lt;/P&gt;
&lt;P&gt;思想，原理，技术，应用&lt;/P&gt;
&lt;H2&gt;&lt;STRONG&gt;参考文章&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;1.&lt;A target=_blank href=&quot;http://www.microsoft.com/china/technet/itsolutions/techguide/msm/smf/smfjobsc.mspx&quot;&gt;Microsoft 管理解决方案：作业调度&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;2.&lt;A target=_blank href=&quot;http://quartznet.sourceforge.net/&quot;&gt;Quartz.NET&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;目录：&lt;A href=&quot;http://www.cnblogs.com/Doho/archive/2009/03/11/1408601.html&quot;&gt;Quartz.NET 架构与源代码分析系列&lt;/A&gt;&lt;BR&gt;下一篇：&lt;A id=homepage1_HomePageDays_DaysList_ctl00_DayItem_DayList_ctl00_TitleUrl class=postTitle2 href=&quot;http://www.cnblogs.com/Doho/archive/2009/03/12/1410081.html&quot;&gt;&lt;FONT color=#0681ba&gt;Quartz.NET 架构与源代码分析系列 part 2 ：Job 作业&lt;/FONT&gt;&lt;/A&gt; &lt;/P&gt;&lt;img src=&quot;http://www.cnblogs.com/Doho/aggbug/1408886.html?type=1&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;/&gt;&lt;p&gt;评论: 8　&lt;a href=&quot;http://www.cnblogs.com/Doho/archive/2009/03/11/1408886.html#pagedcomment&quot; target=&quot;_blank&quot;&gt;查看评论&lt;/a&gt;　&lt;a href=&quot;http://www.cnblogs.com/Doho/archive/2009/03/11/1408886.html#commentform&quot; target=&quot;_blank&quot;&gt;发表评论&lt;/a&gt;&lt;/p&gt;&lt;hr/&gt;&lt;p&gt;最新新闻：&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56793/&quot; target=&quot;_blank&quot;&gt;知名扩展 Firebug 的简化版登陆 Chrome&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:59)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56792/&quot; target=&quot;_blank&quot;&gt;Google 悄悄地启用 1e100.net，打枪地不要&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:57)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56791/&quot; target=&quot;_blank&quot;&gt;从 Google 代码库找到的好东西&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:46)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56789/&quot; target=&quot;_blank&quot;&gt;苹果在线商店临时关闭 或将推新Macbook&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:39)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56788/&quot; target=&quot;_blank&quot;&gt;豆瓣网推出豆瓣电台iPhone客户端&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 21:51)&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;编辑推荐：&lt;a href=&quot;http://news.cnblogs.com/n/56782/&quot; target=&quot;_blank&quot;&gt;2010年2月编程语言排行榜&lt;/a&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;网站导航：&lt;a href=&quot;http://www.cnblogs.com&quot; target=&quot;_blank&quot;&gt;博客园首页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/&quot; target=&quot;_blank&quot;&gt;个人主页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://news.cnblogs.com&quot; target=&quot;_blank&quot;&gt;新闻&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/ing/&quot; target=&quot;_blank&quot;&gt;闪存&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/group/&quot; target=&quot;_blank&quot;&gt;小组&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com/q/&quot; target=&quot;_blank&quot;&gt;博问&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com&quot; target=&quot;_blank&quot;&gt;社区&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://kb.cnblogs.com&quot; target=&quot;_blank&quot;&gt;知识库&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/doho/330759509/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/doho/330759509/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Wed, 11 Mar 2009 16:48:00 +0800</pubDate><author>Doho</author><guid isPermaLink="false">http://www.cnblogs.com/Doho/archive/2009/03/11/1408886.html</guid><dc:creator>Doho</dc:creator><fs:srclink>http://www.cnblogs.com/Doho/archive/2009/03/11/1408886.html</fs:srclink><fs:srcfeed>http://www.cnblogs.com/Doho/rss.aspx</fs:srcfeed><fs:itemid>feedsky/doho/~1223974/330759509/1225823</fs:itemid></item><item><title>Quartz.NET 架构与源代码分析系列</title><link>http://www.cnblogs.com/Doho/archive/2009/03/11/1408601.html</link><description>&lt;p&gt;阅读: 2754 评论: 11 作者: &lt;a href=&quot;http://www.cnblogs.com/Doho/&quot; target=&quot;_blank&quot;&gt;Doho&lt;/a&gt; 发表于 2009-03-11 11:47 &lt;a href=&quot;http://www.cnblogs.com/Doho/archive/2009/03/11/1408601.html&quot; target=&quot;_blank&quot;&gt;原文链接&lt;/a&gt;&lt;/p&gt;&lt;BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;A title=Quartz.NET target=_blank href=&quot;http://quartznet.sourceforge.net/index.html&quot;&gt;&lt;IMG style=&quot;BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; WIDTH: 487px; DISPLAY: inline; HEIGHT: 24px; BORDER-TOP: 0px; BORDER-RIGHT: 0px&quot; title=image border=0 alt=image src=&quot;http://www.cnblogs.com/images/cnblogs_com/Doho/WindowsLiveWriter/Quartz.NET_13D9E/image_3.png&quot; width=682 height=42&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Quartz 是个开源的 Java 作业调度框架，为应用程序的作业调度提供了简单而强大的机制。Quartz.NET是它的C#实现版本，跟许多 Java 开源项目一样，它的命名都是在名字后加上“.NET”，或者名字前面加上“N”，这似乎是开源社区默认的原则。最新的 Quartz.NET 是 2008年11月发布的 1.0 final 版，可以在&lt;A title=http://quartznet.sourceforge.net/ href=&quot;http://quartznet.sourceforge.net/&quot;&gt;sourceforge&lt;/A&gt;上下载到源代码。从社区的反映上来看，虽然Quartz.NET 不比 Lucene.NET 、NUnit等开源项目有人气，但是由于它为作业调度提供了简单、灵活的企业级实现方法，也为开发人员提供了非常方便的接口，相信它在未来几年会得到更多的关注。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 现在关于 Quartz.NET 的中文资料比较少，为了更好地跟园子里的朋友分享 Quartz.NET 的知识，帮助大家尽快熟悉 Quartz.NET，我打算写这个系列。由于本人的水平有限，理解不对的地方还请不吝指出。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 下面是该系列的暂定目录，安排原则是以 “了解-&amp;gt;应用-&amp;gt;原理” 为主线。&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href=&quot;http://www.cnblogs.com/Doho/archive/2009/03/11/1408886.html&quot;&gt;Quartz.NET 架构与源代码分析系列 part 1&amp;nbsp; ：Quartz.NET 入门&lt;/A&gt; 
&lt;LI&gt;&lt;A href=&quot;http://www.cnblogs.com/Doho/archive/2009/03/12/1410081.html&quot;&gt;Quartz.NET 架构与源代码分析系列 part 2&amp;nbsp; ：Job 作业&lt;/A&gt; 
&lt;LI&gt;&lt;A href=&quot;http://www.cnblogs.com/Doho/archive/2009/03/15/1412390.html&quot;&gt;Quartz.NET 架构与源代码分析系列 part 3&amp;nbsp; ：Trigger 触发器&lt;/A&gt; 
&lt;LI&gt;Quartz.NET 架构与源代码分析系列 part 4&amp;nbsp; ：Schedule 调度器 
&lt;LI&gt;Quartz.NET 架构与源代码分析系列 part 5&amp;nbsp; ：Calendar 灵活的触发策略 
&lt;LI&gt;Quartz.NET 架构与源代码分析系列 part 6&amp;nbsp; ：基于配置的调度方案 
&lt;LI&gt;Quartz.NET 架构与源代码分析系列 part 7&amp;nbsp; ：分步式应用 
&lt;LI&gt;Quartz.NET 架构与源代码分析系列 part 8&amp;nbsp; ：总结 &lt;/LI&gt;&lt;/UL&gt;&lt;/BLOCKQUOTE&gt;&lt;img src=&quot;http://www.cnblogs.com/Doho/aggbug/1408601.html?type=1&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;/&gt;&lt;p&gt;评论: 11　&lt;a href=&quot;http://www.cnblogs.com/Doho/archive/2009/03/11/1408601.html#pagedcomment&quot; target=&quot;_blank&quot;&gt;查看评论&lt;/a&gt;　&lt;a href=&quot;http://www.cnblogs.com/Doho/archive/2009/03/11/1408601.html#commentform&quot; target=&quot;_blank&quot;&gt;发表评论&lt;/a&gt;&lt;/p&gt;&lt;hr/&gt;&lt;p&gt;最新新闻：&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56793/&quot; target=&quot;_blank&quot;&gt;知名扩展 Firebug 的简化版登陆 Chrome&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:59)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56792/&quot; target=&quot;_blank&quot;&gt;Google 悄悄地启用 1e100.net，打枪地不要&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:57)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56791/&quot; target=&quot;_blank&quot;&gt;从 Google 代码库找到的好东西&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:46)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56789/&quot; target=&quot;_blank&quot;&gt;苹果在线商店临时关闭 或将推新Macbook&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:39)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56788/&quot; target=&quot;_blank&quot;&gt;豆瓣网推出豆瓣电台iPhone客户端&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 21:51)&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;编辑推荐：&lt;a href=&quot;http://news.cnblogs.com/n/56782/&quot; target=&quot;_blank&quot;&gt;2010年2月编程语言排行榜&lt;/a&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;网站导航：&lt;a href=&quot;http://www.cnblogs.com&quot; target=&quot;_blank&quot;&gt;博客园首页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/&quot; target=&quot;_blank&quot;&gt;个人主页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://news.cnblogs.com&quot; target=&quot;_blank&quot;&gt;新闻&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/ing/&quot; target=&quot;_blank&quot;&gt;闪存&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/group/&quot; target=&quot;_blank&quot;&gt;小组&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com/q/&quot; target=&quot;_blank&quot;&gt;博问&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com&quot; target=&quot;_blank&quot;&gt;社区&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://kb.cnblogs.com&quot; target=&quot;_blank&quot;&gt;知识库&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/doho/330759521/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/doho/330759521/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Wed, 11 Mar 2009 11:47:00 +0800</pubDate><author>Doho</author><guid isPermaLink="false">http://www.cnblogs.com/Doho/archive/2009/03/11/1408601.html</guid><dc:creator>Doho</dc:creator><fs:srclink>http://www.cnblogs.com/Doho/archive/2009/03/11/1408601.html</fs:srclink><fs:srcfeed>http://www.cnblogs.com/Doho/rss.aspx</fs:srcfeed><fs:itemid>feedsky/doho/~1223974/330759521/1225823</fs:itemid></item></channel></rss>