<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
><channel><title>GCCFeli.cn &#187; C#</title> <atom:link href="http://gccfeli.cn/tag/c/feed" rel="self" type="application/rss+xml" /><link>http://gccfeli.cn</link> <description></description> <lastBuildDate>Thu, 14 Jul 2011 08:18:00 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.1</generator> <atom:link rel='hub' href='http://gccfeli.cn/?pushpress=hub'/> <item><title>C# 泛型+扩展方法</title><link>http://gccfeli.cn/2010/10/c-generic-extend-method.html</link> <comments>http://gccfeli.cn/2010/10/c-generic-extend-method.html#comments</comments> <pubDate>Fri, 15 Oct 2010 09:17:26 +0000</pubDate> <dc:creator>Felicia</dc:creator> <category><![CDATA[C#]]></category> <category><![CDATA[精华]]></category> <category><![CDATA[Extend method]]></category> <category><![CDATA[Generic]]></category> <category><![CDATA[Template]]></category><guid
isPermaLink="false">http://gccfeli.cn/?p=838</guid> <description><![CDATA[<p>C# 3.0及以后版本提供了扩展方法这一强大工具，使得动态扩展类变得十分方便。具体使用方法是定义一个static class，然后定义static扩展方法，注意扩展方法的第一个参数必须用this关键字修饰。扩展方法能像类本身定义的方法一样被使用，而不需要修改类的代码，这样扩展原有库中的类就变得非常容易了。扩展方法同样对接口生效，更牛X的是，扩展方法中同样可以使用泛型。</p><p>下面是一个例子，展示了怎样扩展IEnumerable接口，增加一个RandomSelect的方法用于在表中随机选取元素。</p> <span
class="readmore"><a
href="http://gccfeli.cn/2010/10/c-generic-extend-method.html" title="C# 泛型+扩展方法">阅读全文（865字）</a></span>]]></description> <content:encoded><![CDATA[<p>C# 3.0及以后版本提供了扩展方法这一强大工具，使得动态扩展类变得十分方便。具体使用方法是定义一个static class，然后定义static扩展方法，注意扩展方法的第一个参数必须用this关键字修饰。扩展方法能像类本身定义的方法一样被使用，而不需要修改类的代码，这样扩展原有库中的类就变得非常容易了。扩展方法同样对接口生效，更牛X的是，扩展方法中同样可以使用泛型。</p><p>下面是一个例子，展示了怎样扩展IEnumerable接口，增加一个RandomSelect的方法用于在表中随机选取元素。</p><pre>
<div class="codecolorer-container csharp mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="csharp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">class</span> IEnumerableExtensions<br />
<span style="color: #008000;">&#123;</span><br />
  &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">static</span> IEnumerable<span style="color: #008000;">&lt;</span>T<span style="color: #008000;">&gt;</span> RandomSelect<span style="color: #008000;">&lt;</span>T<span style="color: #008000;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #0600FF; font-weight: bold;">this</span> IEnumerable<span style="color: #008000;">&lt;</span>T<span style="color: #008000;">&gt;</span> input, <span style="color: #6666cc; font-weight: bold;">int</span> outputSize<span style="color: #008000;">&#41;</span><br />
  &nbsp; <span style="color: #008000;">&#123;</span><br />
  &nbsp; &nbsp; &nbsp; <span style="color: #6666cc; font-weight: bold;">int</span> size <span style="color: #008000;">=</span> input<span style="color: #008000;">.</span><span style="color: #0000FF;">Count</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
<br />
  &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>outputSize <span style="color: #008000;">&lt;</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span><br />
  &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; outputSize <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span><br />
  &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
  &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>outputSize <span style="color: #008000;">&gt;</span> size<span style="color: #008000;">&#41;</span><br />
  &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; outputSize <span style="color: #008000;">=</span> size<span style="color: #008000;">;</span><br />
  &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<br />
  &nbsp; &nbsp; &nbsp; List<span style="color: #008000;">&lt;</span><span style="color: #6666cc; font-weight: bold;">int</span><span style="color: #008000;">&gt;</span> index <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> List<span style="color: #008000;">&lt;</span><span style="color: #6666cc; font-weight: bold;">int</span><span style="color: #008000;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
  &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> i <span style="color: #008000;">&lt;</span> size<span style="color: #008000;">;</span> i<span style="color: #008000;">++</span><span style="color: #008000;">&#41;</span><br />
  &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; index<span style="color: #008000;">.</span><span style="color: #0000FF;">Add</span><span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
  &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<br />
  &nbsp; &nbsp; &nbsp; List<span style="color: #008000;">&lt;</span>T<span style="color: #008000;">&gt;</span> ret <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> List<span style="color: #008000;">&lt;</span>T<span style="color: #008000;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
  &nbsp; &nbsp; &nbsp; Random rand <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Random<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
  &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> i <span style="color: #008000;">&lt;</span> outputSize<span style="color: #008000;">;</span> i<span style="color: #008000;">++</span><span style="color: #008000;">&#41;</span><br />
  &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #6666cc; font-weight: bold;">int</span> r <span style="color: #008000;">=</span> rand<span style="color: #008000;">.</span><span style="color: #0000FF;">Next</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">%</span> <span style="color: #008000;">&#40;</span>size <span style="color: #008000;">-</span> i<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ret<span style="color: #008000;">.</span><span style="color: #0000FF;">Add</span><span style="color: #008000;">&#40;</span>input<span style="color: #008000;">.</span><span style="color: #0000FF;">ElementAt</span><span style="color: #008000;">&#40;</span>index<span style="color: #008000;">&#91;</span>r<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; index<span style="color: #008000;">&#91;</span>r<span style="color: #008000;">&#93;</span> <span style="color: #008000;">=</span> index<span style="color: #008000;">&#91;</span>size <span style="color: #008000;">-</span> i <span style="color: #008000;">-</span> <span style="color: #FF0000;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">;</span><br />
  &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<br />
  &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">return</span> ret<span style="color: #008000;">;</span><br />
  &nbsp; <span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span></div></div>
</pre><p>使用方法和原生方法是一样一样的：）</p><pre>
<div class="codecolorer-container csharp mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="csharp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">List sourceList <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> List<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><span style="color: #FF0000;">1</span>, <span style="color: #FF0000;">2</span>, <span style="color: #FF0000;">3</span>, <span style="color: #FF0000;">4</span>, <span style="color: #FF0000;">5</span><span style="color: #008000;">&#125;</span><span style="color: #008000;">;</span><br />
IEnumerable randomSelectedList <span style="color: #008000;">=</span> sourceList<span style="color: #008000;">.</span><span style="color: #0000FF;">RandomSelect</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">3</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span></div></div>
</pre>]]></content:encoded> <wfw:commentRss>http://gccfeli.cn/2010/10/c-generic-extend-method.html/feed</wfw:commentRss> <slash:comments>8</slash:comments> </item> <item><title>在 C# 中实现 Singleton</title><link>http://gccfeli.cn/2009/12/cshar-singleton.html</link> <comments>http://gccfeli.cn/2009/12/cshar-singleton.html#comments</comments> <pubDate>Wed, 23 Dec 2009 04:51:30 +0000</pubDate> <dc:creator>Felicia</dc:creator> <category><![CDATA[C#]]></category> <category><![CDATA[Singleton]]></category> <category><![CDATA[多线程]]></category><guid
isPermaLink="false">http://gccfeli.cn/2009/12/%e5%9c%a8-c-%e4%b8%ad%e5%ae%9e%e7%8e%b0-singleton.html</guid> <description><![CDATA[<p>我们需要只有一个实例的类，并且需要提供一个用于访问实例的全局访问点，还希望确保解决方案是线程安全的。</p><p>下面的实现仅允许一个线程在尚未创建 <strong>Singleton</strong> 实例的情况下进入关键区域（该区域由 <strong>lock</strong> 块标识）。</p><div
class="hl-wrapper"> <span
class="readmore"><a
href="http://gccfeli.cn/2009/12/cshar-singleton.html" title="在 C# 中实现 Singleton">阅读全文（370字）</a></span>]]></description> <content:encoded><![CDATA[<p>我们需要只有一个实例的类，并且需要提供一个用于访问实例的全局访问点，还希望确保解决方案是线程安全的。</p><p>下面的实现仅允许一个线程在尚未创建 <strong>Singleton</strong> 实例的情况下进入关键区域（该区域由 <strong>lock</strong> 块标识）。</p><div
class="hl-wrapper"><div
class="hl-surround"><div
class="hl-main"><span
class="hl-reserved">using</span><span
class="hl-code"> </span><span
class="hl-identifier">System</span><span
class="hl-code">; <br
/></span><span
class="hl-reserved">public</span><span
class="hl-code"> </span><span
class="hl-identifier">sealed</span><span
class="hl-code"> </span><span
class="hl-types">class</span><span
class="hl-code"> </span><span
class="hl-identifier">Singleton</span><span
class="hl-code"> <br
/></span><span
class="hl-brackets">{</span><span
class="hl-code"> <br
/>&nbsp;&nbsp; </span><span
class="hl-reserved">private</span><span
class="hl-code"> </span><span
class="hl-types">static</span><span
class="hl-code"> </span><span
class="hl-types">volatile</span><span
class="hl-code"> </span><span
class="hl-identifier">Singleton</span><span
class="hl-code"> </span><span
class="hl-identifier">instance</span><span
class="hl-code">; <br
/>&nbsp;&nbsp; </span><span
class="hl-reserved">private</span><span
class="hl-code"> </span><span
class="hl-types">static</span><span
class="hl-code"> </span><span
class="hl-identifier">object</span><span
class="hl-code"> </span><span
class="hl-identifier">syncRoot</span><span
class="hl-code"> = </span><span
class="hl-reserved">new</span><span
class="hl-code"> </span><span
class="hl-identifier">Object</span><span
class="hl-brackets">()</span><span
class="hl-code">; <br
/>&nbsp;&nbsp; </span><span
class="hl-reserved">private</span><span
class="hl-code"> </span><span
class="hl-identifier">Singleton</span><span
class="hl-brackets">()</span><span
class="hl-code"> </span><span
class="hl-brackets">{}</span><span
class="hl-code"> <br
/>&nbsp;&nbsp; </span><span
class="hl-reserved">public</span><span
class="hl-code"> </span><span
class="hl-types">static</span><span
class="hl-code"> </span><span
class="hl-identifier">Singleton</span><span
class="hl-code"> </span><span
class="hl-identifier">Instance</span><span
class="hl-code"> <br
/>&nbsp;&nbsp; </span><span
class="hl-brackets">{</span><span
class="hl-code"> <br
/>&nbsp;&nbsp; &nbsp; &nbsp;</span><span
class="hl-identifier">get</span><span
class="hl-code">&nbsp; <br
/>&nbsp;&nbsp; &nbsp; &nbsp;</span><span
class="hl-brackets">{</span><span
class="hl-code"> <br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; </span><span
class="hl-reserved">if</span><span
class="hl-code"> </span><span
class="hl-brackets">(</span><span
class="hl-identifier">instance</span><span
class="hl-code"> == </span><span
class="hl-identifier">null</span><span
class="hl-brackets">)</span><span
class="hl-code">&nbsp; <br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; </span><span
class="hl-brackets">{</span><span
class="hl-code"> <br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-identifier">lock</span><span
class="hl-code"> </span><span
class="hl-brackets">(</span><span
class="hl-identifier">syncRoot</span><span
class="hl-brackets">)</span><span
class="hl-code">&nbsp; <br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-brackets">{</span><span
class="hl-code"> <br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span
class="hl-reserved">if</span><span
class="hl-code"> </span><span
class="hl-brackets">(</span><span
class="hl-identifier">instance</span><span
class="hl-code"> == </span><span
class="hl-identifier">null</span><span
class="hl-brackets">)</span><span
class="hl-code">&nbsp; <br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-identifier">instance</span><span
class="hl-code"> = </span><span
class="hl-reserved">new</span><span
class="hl-code"> </span><span
class="hl-identifier">Singleton</span><span
class="hl-brackets">()</span><span
class="hl-code">; <br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-brackets">}</span><span
class="hl-code"> <br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; </span><span
class="hl-brackets">}</span><span
class="hl-code"> <br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; </span><span
class="hl-reserved">return</span><span
class="hl-code"> </span><span
class="hl-identifier">instance</span><span
class="hl-code">; <br
/>&nbsp;&nbsp; &nbsp; &nbsp;</span><span
class="hl-brackets">}</span><span
class="hl-code"> <br
/>&nbsp;&nbsp; </span><span
class="hl-brackets">}</span><span
class="hl-code"> <br
/></span><span
class="hl-brackets">}</span></div></div></div> ]]></content:encoded> <wfw:commentRss>http://gccfeli.cn/2009/12/cshar-singleton.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Error &#8211; Unable to find manifest signing certificate in the certificate store</title><link>http://gccfeli.cn/2009/12/error-unable-to-find-manifest-signing-certificate-in-the-certificate-store.html</link> <comments>http://gccfeli.cn/2009/12/error-unable-to-find-manifest-signing-certificate-in-the-certificate-store.html#comments</comments> <pubDate>Thu, 10 Dec 2009 10:02:59 +0000</pubDate> <dc:creator>Felicia</dc:creator> <category><![CDATA[C#]]></category> <category><![CDATA[Certificate]]></category> <category><![CDATA[Manifest]]></category> <category><![CDATA[Signing]]></category><guid
isPermaLink="false">http://gccfeli.cn/2009/12/error-unable-to-find-manifest-signing-certificate-in-the-certificate-store.html</guid> <description><![CDATA[<p>I got this when I renamed my C# project then tried to publish it. To solve, I went to the &#8220;Signing&#8221; tab of the project properties and unchecked &#8220;Sign the ClickOnce manifests&#8221;.</p> <span
class="readmore"><a
href="http://gccfeli.cn/2009/12/error-unable-to-find-manifest-signing-certificate-in-the-certificate-store.html" title="Error &#8211; Unable to find manifest signing certificate in the certificate store">阅读全文（153字）</a></span>]]></description> <content:encoded><![CDATA[<p>I got this when I renamed my C# project then tried to publish it. To solve, I went to the &#8220;Signing&#8221; tab of the project properties and unchecked &#8220;Sign the ClickOnce manifests&#8221;.</p><p>Good luck!</p> ]]></content:encoded> <wfw:commentRss>http://gccfeli.cn/2009/12/error-unable-to-find-manifest-signing-certificate-in-the-certificate-store.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>C# Accurate Timer</title><link>http://gccfeli.cn/2009/10/csharp-accurate-time.html</link> <comments>http://gccfeli.cn/2009/10/csharp-accurate-time.html#comments</comments> <pubDate>Mon, 12 Oct 2009 02:59:14 +0000</pubDate> <dc:creator>Felicia</dc:creator> <category><![CDATA[C#]]></category> <category><![CDATA[Timer]]></category><guid
isPermaLink="false">http://gccfeli.cn/?p=768</guid> <description><![CDATA[<p>C# 有三个标准定时器，分别是 System.Windows.Forms.Timer, System.Threading.Timer, System.Timers.Timer。<br
/> 这三个Timer都不是很准确，无法进行精确到1毫秒的定时。经测试，这三种Timer的最小触发时间间隔是大约15毫秒。<br
/> 因此我们必须寻找另外的方案。</p> <span
class="readmore"><a
href="http://gccfeli.cn/2009/10/csharp-accurate-time.html" title="C# Accurate Timer">阅读全文（2489字）</a></span>]]></description> <content:encoded><![CDATA[<p>C# 有三个标准定时器，分别是 System.Windows.Forms.Timer, System.Threading.Timer, System.Timers.Timer。<br
/> 这三个Timer都不是很准确，无法进行精确到1毫秒的定时。经测试，这三种Timer的最小触发时间间隔是大约15毫秒。<br
/> 因此我们必须寻找另外的方案。</p><p>Windows提供了用于多媒体的winmm.dll，可以满足高精度定时的要求。<br
/> 下面是winmm.dll提供的API的C#包装。</p><div
class="hl-wrapper"><div
class="hl-surround"><div
class="hl-main"><span
class="hl-reserved">public</span><span
class="hl-code"> </span><span
class="hl-types">class</span><span
class="hl-code"> </span><span
class="hl-identifier">MMTimer</span><span
class="hl-code"> : </span><span
class="hl-identifier">IDisposable</span><span
class="hl-code"><br
/></span><span
class="hl-brackets">{</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-comment">//Lib API declarations</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-brackets">[</span><span
class="hl-identifier">DllImport</span><span
class="hl-brackets">(</span><span
class="hl-quotes">&quot;</span><span
class="hl-string">Winmm.dll</span><span
class="hl-quotes">&quot;</span><span
class="hl-code">, </span><span
class="hl-identifier">CharSet</span><span
class="hl-code"> = </span><span
class="hl-identifier">CharSet</span><span
class="hl-code">.</span><span
class="hl-identifier">Auto</span><span
class="hl-brackets">)]</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-types">static</span><span
class="hl-code"> </span><span
class="hl-types">extern</span><span
class="hl-code"> </span><span
class="hl-identifier">uint</span><span
class="hl-code"> </span><span
class="hl-identifier">timeSetEvent</span><span
class="hl-brackets">(</span><span
class="hl-identifier">uint</span><span
class="hl-code"> </span><span
class="hl-identifier">uDelay</span><span
class="hl-code">, </span><span
class="hl-identifier">uint</span><span
class="hl-code"> </span><span
class="hl-identifier">uResolution</span><span
class="hl-code">, </span><span
class="hl-identifier">TimerCallback</span><span
class="hl-code"> </span><span
class="hl-identifier">lpTimeProc</span><span
class="hl-code">, </span><span
class="hl-identifier">UIntPtr</span><span
class="hl-code"> </span><span
class="hl-identifier">dwUser</span><span
class="hl-code">, </span><span
class="hl-identifier">uint</span><span
class="hl-code"> </span><span
class="hl-identifier">fuEvent</span><span
class="hl-brackets">)</span><span
class="hl-code">;<br
/>&nbsp;<br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-brackets">[</span><span
class="hl-identifier">DllImport</span><span
class="hl-brackets">(</span><span
class="hl-quotes">&quot;</span><span
class="hl-string">Winmm.dll</span><span
class="hl-quotes">&quot;</span><span
class="hl-code">, </span><span
class="hl-identifier">CharSet</span><span
class="hl-code"> = </span><span
class="hl-identifier">CharSet</span><span
class="hl-code">.</span><span
class="hl-identifier">Auto</span><span
class="hl-brackets">)]</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-types">static</span><span
class="hl-code"> </span><span
class="hl-types">extern</span><span
class="hl-code"> </span><span
class="hl-identifier">uint</span><span
class="hl-code"> </span><span
class="hl-identifier">timeKillEvent</span><span
class="hl-brackets">(</span><span
class="hl-identifier">uint</span><span
class="hl-code"> </span><span
class="hl-identifier">uTimerID</span><span
class="hl-brackets">)</span><span
class="hl-code">;<br
/>&nbsp;<br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-brackets">[</span><span
class="hl-identifier">DllImport</span><span
class="hl-brackets">(</span><span
class="hl-quotes">&quot;</span><span
class="hl-string">Winmm.dll</span><span
class="hl-quotes">&quot;</span><span
class="hl-code">, </span><span
class="hl-identifier">CharSet</span><span
class="hl-code"> = </span><span
class="hl-identifier">CharSet</span><span
class="hl-code">.</span><span
class="hl-identifier">Auto</span><span
class="hl-brackets">)]</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-types">static</span><span
class="hl-code"> </span><span
class="hl-types">extern</span><span
class="hl-code"> </span><span
class="hl-identifier">uint</span><span
class="hl-code"> </span><span
class="hl-identifier">timeGetTime</span><span
class="hl-brackets">()</span><span
class="hl-code">;<br
/>&nbsp;<br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-brackets">[</span><span
class="hl-identifier">DllImport</span><span
class="hl-brackets">(</span><span
class="hl-quotes">&quot;</span><span
class="hl-string">Winmm.dll</span><span
class="hl-quotes">&quot;</span><span
class="hl-code">, </span><span
class="hl-identifier">CharSet</span><span
class="hl-code"> = </span><span
class="hl-identifier">CharSet</span><span
class="hl-code">.</span><span
class="hl-identifier">Auto</span><span
class="hl-brackets">)]</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-types">static</span><span
class="hl-code"> </span><span
class="hl-types">extern</span><span
class="hl-code"> </span><span
class="hl-identifier">uint</span><span
class="hl-code"> </span><span
class="hl-identifier">timeBeginPeriod</span><span
class="hl-brackets">(</span><span
class="hl-identifier">uint</span><span
class="hl-code"> </span><span
class="hl-identifier">uPeriod</span><span
class="hl-brackets">)</span><span
class="hl-code">;<br
/>&nbsp;<br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-brackets">[</span><span
class="hl-identifier">DllImport</span><span
class="hl-brackets">(</span><span
class="hl-quotes">&quot;</span><span
class="hl-string">Winmm.dll</span><span
class="hl-quotes">&quot;</span><span
class="hl-code">, </span><span
class="hl-identifier">CharSet</span><span
class="hl-code"> = </span><span
class="hl-identifier">CharSet</span><span
class="hl-code">.</span><span
class="hl-identifier">Auto</span><span
class="hl-brackets">)]</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-types">static</span><span
class="hl-code"> </span><span
class="hl-types">extern</span><span
class="hl-code"> </span><span
class="hl-identifier">uint</span><span
class="hl-code"> </span><span
class="hl-identifier">timeEndPeriod</span><span
class="hl-brackets">(</span><span
class="hl-identifier">uint</span><span
class="hl-code"> </span><span
class="hl-identifier">uPeriod</span><span
class="hl-brackets">)</span><span
class="hl-code">;<br
/>&nbsp;<br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-comment">//Timer type definitions</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-brackets">[</span><span
class="hl-identifier">Flags</span><span
class="hl-brackets">]</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-reserved">public</span><span
class="hl-code"> </span><span
class="hl-types">enum</span><span
class="hl-code"> </span><span
class="hl-identifier">fuEvent</span><span
class="hl-code"> : </span><span
class="hl-identifier">uint</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-brackets">{</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-identifier">TIME_ONESHOT</span><span
class="hl-code"> = </span><span
class="hl-number">0</span><span
class="hl-code">,&nbsp; &nbsp; &nbsp; </span><span
class="hl-comment">//Event occurs once, after uDelay milliseconds.</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-identifier">TIME_PERIODIC</span><span
class="hl-code"> = </span><span
class="hl-number">1</span><span
class="hl-code">,<br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-identifier">TIME_CALLBACK_FUNCTION</span><span
class="hl-code"> = </span><span
class="hl-number">0x0000</span><span
class="hl-code">,&nbsp; </span><span
class="hl-mlcomment">/* callback is function */</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-comment">//TIME_CALLBACK_EVENT_SET = 0x0010, /* callback is event - use SetEvent */</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-comment">//TIME_CALLBACK_EVENT_PULSE = 0x0020&nbsp; /* callback is event - use PulseEvent */</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-brackets">}</span><span
class="hl-code"><br
/>&nbsp;<br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-comment">//Delegate definition for the API callback</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-identifier">delegate</span><span
class="hl-code"> </span><span
class="hl-types">void</span><span
class="hl-code"> </span><span
class="hl-identifier">TimerCallback</span><span
class="hl-brackets">(</span><span
class="hl-identifier">uint</span><span
class="hl-code"> </span><span
class="hl-identifier">uTimerID</span><span
class="hl-code">, </span><span
class="hl-identifier">uint</span><span
class="hl-code"> </span><span
class="hl-identifier">uMsg</span><span
class="hl-code">, </span><span
class="hl-identifier">UIntPtr</span><span
class="hl-code"> </span><span
class="hl-identifier">dwUser</span><span
class="hl-code">, </span><span
class="hl-identifier">UIntPtr</span><span
class="hl-code"> </span><span
class="hl-identifier">dw1</span><span
class="hl-code">, </span><span
class="hl-identifier">UIntPtr</span><span
class="hl-code"> </span><span
class="hl-identifier">dw2</span><span
class="hl-brackets">)</span><span
class="hl-code">;<br
/>&nbsp;<br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-comment">//IDisposable code</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-reserved">private</span><span
class="hl-code"> </span><span
class="hl-types">bool</span><span
class="hl-code"> </span><span
class="hl-identifier">disposed</span><span
class="hl-code"> = </span><span
class="hl-reserved">false</span><span
class="hl-code">;<br
/>&nbsp;<br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-reserved">public</span><span
class="hl-code"> </span><span
class="hl-types">void</span><span
class="hl-code"> </span><span
class="hl-identifier">Dispose</span><span
class="hl-brackets">()</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-brackets">{</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-identifier">Dispose</span><span
class="hl-brackets">(</span><span
class="hl-reserved">true</span><span
class="hl-brackets">)</span><span
class="hl-code">;<br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-identifier">GC</span><span
class="hl-code">.</span><span
class="hl-identifier">SuppressFinalize</span><span
class="hl-brackets">(</span><span
class="hl-reserved">this</span><span
class="hl-brackets">)</span><span
class="hl-code">;<br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-brackets">}</span><span
class="hl-code"><br
/>&nbsp;<br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-reserved">private</span><span
class="hl-code"> </span><span
class="hl-types">void</span><span
class="hl-code"> </span><span
class="hl-identifier">Dispose</span><span
class="hl-brackets">(</span><span
class="hl-types">bool</span><span
class="hl-code"> </span><span
class="hl-identifier">disposing</span><span
class="hl-brackets">)</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-brackets">{</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-reserved">if</span><span
class="hl-code"> </span><span
class="hl-brackets">(</span><span
class="hl-code">!</span><span
class="hl-reserved">this</span><span
class="hl-code">.</span><span
class="hl-identifier">disposed</span><span
class="hl-brackets">)</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-brackets">{</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-reserved">if</span><span
class="hl-code"> </span><span
class="hl-brackets">(</span><span
class="hl-identifier">disposing</span><span
class="hl-brackets">)</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-brackets">{</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-identifier">Stop</span><span
class="hl-brackets">()</span><span
class="hl-code">;<br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-brackets">}</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-brackets">}</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-identifier">disposed</span><span
class="hl-code"> = </span><span
class="hl-reserved">true</span><span
class="hl-code">;<br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-brackets">}</span><span
class="hl-code"><br
/>&nbsp;<br
/>&nbsp;&nbsp; &nbsp;~</span><span
class="hl-identifier">MMTimer</span><span
class="hl-brackets">()</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-brackets">{</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-identifier">Dispose</span><span
class="hl-brackets">(</span><span
class="hl-reserved">false</span><span
class="hl-brackets">)</span><span
class="hl-code">;<br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-brackets">}</span><span
class="hl-code"><br
/>&nbsp;<br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-comment">/// &lt;summary&gt;</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-comment">/// The current timer instance ID</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-comment">/// &lt;/summary&gt;</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-identifier">uint</span><span
class="hl-code"> </span><span
class="hl-identifier">id</span><span
class="hl-code"> = </span><span
class="hl-number">0</span><span
class="hl-code">;<br
/>&nbsp;<br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-comment">/// &lt;summary&gt;</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-comment">/// The callback used by the the API</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-comment">/// &lt;/summary&gt;</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-identifier">TimerCallback</span><span
class="hl-code"> </span><span
class="hl-identifier">thisCB</span><span
class="hl-code">;<br
/>&nbsp;<br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-comment">/// &lt;summary&gt;</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-comment">/// The timer elapsed event</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-comment">/// &lt;/summary&gt;</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-reserved">public</span><span
class="hl-code"> </span><span
class="hl-identifier">event</span><span
class="hl-code"> </span><span
class="hl-identifier">EventHandler</span><span
class="hl-code"> </span><span
class="hl-identifier">Timer</span><span
class="hl-code">;<br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-reserved">protected</span><span
class="hl-code"> </span><span
class="hl-types">virtual</span><span
class="hl-code"> </span><span
class="hl-types">void</span><span
class="hl-code"> </span><span
class="hl-identifier">OnTimer</span><span
class="hl-brackets">(</span><span
class="hl-identifier">EventArgs</span><span
class="hl-code"> </span><span
class="hl-identifier">e</span><span
class="hl-brackets">)</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-brackets">{</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-reserved">if</span><span
class="hl-code"> </span><span
class="hl-brackets">(</span><span
class="hl-identifier">Timer</span><span
class="hl-code"> != </span><span
class="hl-identifier">null</span><span
class="hl-brackets">)</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-identifier">Timer</span><span
class="hl-brackets">(</span><span
class="hl-reserved">this</span><span
class="hl-code">, </span><span
class="hl-identifier">e</span><span
class="hl-brackets">)</span><span
class="hl-code">;<br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-brackets">}</span><span
class="hl-code"><br
/>&nbsp;<br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-reserved">public</span><span
class="hl-code"> </span><span
class="hl-identifier">MMTimer</span><span
class="hl-brackets">()</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-brackets">{</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-comment">//Initialize the API callback</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-identifier">thisCB</span><span
class="hl-code"> = </span><span
class="hl-identifier">CBFunc</span><span
class="hl-code">;<br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-brackets">}</span><span
class="hl-code"><br
/>&nbsp;<br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-comment">/// &lt;summary&gt;</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-comment">/// Stop the current timer instance (if any)</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-comment">/// &lt;/summary&gt;</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-reserved">public</span><span
class="hl-code"> </span><span
class="hl-types">void</span><span
class="hl-code"> </span><span
class="hl-identifier">Stop</span><span
class="hl-brackets">()</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-brackets">{</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-identifier">lock</span><span
class="hl-code"> </span><span
class="hl-brackets">(</span><span
class="hl-reserved">this</span><span
class="hl-brackets">)</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-brackets">{</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-reserved">if</span><span
class="hl-code"> </span><span
class="hl-brackets">(</span><span
class="hl-identifier">id</span><span
class="hl-code"> != </span><span
class="hl-number">0</span><span
class="hl-brackets">)</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-brackets">{</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-identifier">timeKillEvent</span><span
class="hl-brackets">(</span><span
class="hl-identifier">id</span><span
class="hl-brackets">)</span><span
class="hl-code">;<br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-identifier">Console</span><span
class="hl-code">.</span><span
class="hl-identifier">WriteLine</span><span
class="hl-brackets">(</span><span
class="hl-quotes">&quot;</span><span
class="hl-string">MMTimer </span><span
class="hl-quotes">&quot;</span><span
class="hl-code"> + </span><span
class="hl-identifier">id</span><span
class="hl-code">.</span><span
class="hl-identifier">ToString</span><span
class="hl-brackets">()</span><span
class="hl-code"> + </span><span
class="hl-quotes">&quot;</span><span
class="hl-string"> stopped</span><span
class="hl-quotes">&quot;</span><span
class="hl-brackets">)</span><span
class="hl-code">;<br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-identifier">id</span><span
class="hl-code"> = </span><span
class="hl-number">0</span><span
class="hl-code">;<br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-brackets">}</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-brackets">}</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-brackets">}</span><span
class="hl-code"><br
/>&nbsp;<br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-comment">/// &lt;summary&gt;</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-comment">/// Start a timer instance</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-comment">/// &lt;/summary&gt;</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-comment">/// &lt;param name=&quot;ms&quot;&gt;Timer interval in milliseconds&lt;/param&gt;</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-comment">/// &lt;param name=&quot;repeat&quot;&gt;If true sets a repetitive event, otherwise sets a one-shot&lt;/param&gt;</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-reserved">public</span><span
class="hl-code"> </span><span
class="hl-types">void</span><span
class="hl-code"> </span><span
class="hl-identifier">Start</span><span
class="hl-brackets">(</span><span
class="hl-identifier">uint</span><span
class="hl-code"> </span><span
class="hl-identifier">ms</span><span
class="hl-code">, </span><span
class="hl-types">bool</span><span
class="hl-code"> </span><span
class="hl-identifier">repeat</span><span
class="hl-brackets">)</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-brackets">{</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-comment">//Kill any existing timer</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-identifier">Stop</span><span
class="hl-brackets">()</span><span
class="hl-code">;<br
/>&nbsp;<br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-comment">//Set the timer type flags</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-identifier">fuEvent</span><span
class="hl-code"> </span><span
class="hl-identifier">f</span><span
class="hl-code"> = </span><span
class="hl-identifier">fuEvent</span><span
class="hl-code">.</span><span
class="hl-identifier">TIME_CALLBACK_FUNCTION</span><span
class="hl-code"> | </span><span
class="hl-brackets">(</span><span
class="hl-identifier">repeat</span><span
class="hl-code"> ? </span><span
class="hl-identifier">fuEvent</span><span
class="hl-code">.</span><span
class="hl-identifier">TIME_PERIODIC</span><span
class="hl-code"> : </span><span
class="hl-identifier">fuEvent</span><span
class="hl-code">.</span><span
class="hl-identifier">TIME_ONESHOT</span><span
class="hl-brackets">)</span><span
class="hl-code">;<br
/>&nbsp;<br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-identifier">lock</span><span
class="hl-code"> </span><span
class="hl-brackets">(</span><span
class="hl-reserved">this</span><span
class="hl-brackets">)</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-brackets">{</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-identifier">id</span><span
class="hl-code"> = </span><span
class="hl-identifier">timeSetEvent</span><span
class="hl-brackets">(</span><span
class="hl-identifier">ms</span><span
class="hl-code">, </span><span
class="hl-number">0</span><span
class="hl-code">, </span><span
class="hl-identifier">thisCB</span><span
class="hl-code">, </span><span
class="hl-identifier">UIntPtr</span><span
class="hl-code">.</span><span
class="hl-identifier">Zero</span><span
class="hl-code">, </span><span
class="hl-brackets">(</span><span
class="hl-identifier">uint</span><span
class="hl-brackets">)</span><span
class="hl-identifier">f</span><span
class="hl-brackets">)</span><span
class="hl-code">;<br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-reserved">if</span><span
class="hl-code"> </span><span
class="hl-brackets">(</span><span
class="hl-identifier">id</span><span
class="hl-code"> == </span><span
class="hl-number">0</span><span
class="hl-brackets">)</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-reserved">throw</span><span
class="hl-code"> </span><span
class="hl-reserved">new</span><span
class="hl-code"> </span><span
class="hl-identifier">Exception</span><span
class="hl-brackets">(</span><span
class="hl-quotes">&quot;</span><span
class="hl-string">timeSetEvent error</span><span
class="hl-quotes">&quot;</span><span
class="hl-brackets">)</span><span
class="hl-code">;<br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-identifier">Console</span><span
class="hl-code">.</span><span
class="hl-identifier">WriteLine</span><span
class="hl-brackets">(</span><span
class="hl-quotes">&quot;</span><span
class="hl-string">MMTimer </span><span
class="hl-quotes">&quot;</span><span
class="hl-code"> + </span><span
class="hl-identifier">id</span><span
class="hl-code">.</span><span
class="hl-identifier">ToString</span><span
class="hl-brackets">()</span><span
class="hl-code"> + </span><span
class="hl-quotes">&quot;</span><span
class="hl-string"> started</span><span
class="hl-quotes">&quot;</span><span
class="hl-brackets">)</span><span
class="hl-code">;<br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-brackets">}</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-brackets">}</span><span
class="hl-code"><br
/>&nbsp;<br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-types">void</span><span
class="hl-code"> </span><span
class="hl-identifier">CBFunc</span><span
class="hl-brackets">(</span><span
class="hl-identifier">uint</span><span
class="hl-code"> </span><span
class="hl-identifier">uTimerID</span><span
class="hl-code">, </span><span
class="hl-identifier">uint</span><span
class="hl-code"> </span><span
class="hl-identifier">uMsg</span><span
class="hl-code">, </span><span
class="hl-identifier">UIntPtr</span><span
class="hl-code"> </span><span
class="hl-identifier">dwUser</span><span
class="hl-code">, </span><span
class="hl-identifier">UIntPtr</span><span
class="hl-code"> </span><span
class="hl-identifier">dw1</span><span
class="hl-code">, </span><span
class="hl-identifier">UIntPtr</span><span
class="hl-code"> </span><span
class="hl-identifier">dw2</span><span
class="hl-brackets">)</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-brackets">{</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-comment">//Callback from the MMTimer API that fires the Timer event. Note we are in a different thread here</span><span
class="hl-code"><br
/>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span
class="hl-identifier">OnTimer</span><span
class="hl-brackets">(</span><span
class="hl-reserved">new</span><span
class="hl-code"> </span><span
class="hl-identifier">EventArgs</span><span
class="hl-brackets">())</span><span
class="hl-code">;<br
/>&nbsp;&nbsp; &nbsp;</span><span
class="hl-brackets">}</span><span
class="hl-code"><br
/></span><span
class="hl-brackets">}</span></div></div></div> ]]></content:encoded> <wfw:commentRss>http://gccfeli.cn/2009/10/csharp-accurate-time.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>转到计科的第一学期结束了</title><link>http://gccfeli.cn/2008/07/cs-1st-term.html</link> <comments>http://gccfeli.cn/2008/07/cs-1st-term.html#comments</comments> <pubDate>Tue, 01 Jul 2008 13:28:43 +0000</pubDate> <dc:creator>Felicia</dc:creator> <category><![CDATA[心情日记]]></category> <category><![CDATA[C#]]></category> <category><![CDATA[大作业]]></category> <category><![CDATA[游戏]]></category> <category><![CDATA[转专业]]></category> <category><![CDATA[魔方]]></category><guid
isPermaLink="false">http://www.gccfeli.cn/archives/157.html</guid> <description><![CDATA[<p>今年做的最大的决定，就是转专业到计科了。我在转专业之前考虑了很久，最终确定我的确比较适合学习计算机，之后就毫不犹豫的转了。因为是大二下转专业，所以我要补修非常多的课。其实这个学期还好，也就比同班的人多上了大学语文，数字逻辑，c语言。不过由于这个学期比赛比较多，final回来之后又陆续参加了一些小的比赛，所以平时的课有的没有办法上了。期末的时候学习非常紧张，考试频繁，很多东西我又是第一次接触。比如我先学微机系统与接口技术，再学数字逻辑，再学汇编语言，完全是跟正常的专业培养方案反过来了。还好我发现自己对计算机专业的知识有较强的领悟能力，一切都还能掌握。期末考试之前我采用两天复习法，每天复习两小时，基本上搞定所有的课。就等出成绩啦，嘿嘿！<br
/> <span
class="readmore"><a
href="http://gccfeli.cn/2008/07/cs-1st-term.html" title="转到计科的第一学期结束了">阅读全文（455字）</a></span>]]></description> <content:encoded><![CDATA[<p>今年做的最大的决定，就是转专业到计科了。我在转专业之前考虑了很久，最终确定我的确比较适合学习计算机，之后就毫不犹豫的转了。因为是大二下转专业，所以我要补修非常多的课。其实这个学期还好，也就比同班的人多上了大学语文，数字逻辑，c语言。不过由于这个学期比赛比较多，final回来之后又陆续参加了一些小的比赛，所以平时的课有的没有办法上了。期末的时候学习非常紧张，考试频繁，很多东西我又是第一次接触。比如我先学微机系统与接口技术，再学数字逻辑，再学汇编语言，完全是跟正常的专业培养方案反过来了。还好我发现自己对计算机专业的知识有较强的领悟能力，一切都还能掌握。期末考试之前我采用两天复习法，每天复习两小时，基本上搞定所有的课。就等出成绩啦，嘿嘿！<br
/> <span
id="more-157"></span><br
/> 我这段时间做的最自豪的事就是写好了c语言大作业，虽然是补修大一的课，我还是很认真的！看看我的游戏截图吧！可惜空间太小，不能提供下载……<br
/> <a
href="http://picasaweb.google.com/Felicia1101/mOyEXD/photo#5218031714008083954"><img
src="http://lh5.ggpht.com/Felicia1101/SGosMpQsrfI/AAAAAAAADg8/hswkr0b7T-k/s800/Screenshot-NaturePark.jpg" /></a></p><p>今天考完数据结构，感觉没什么事了，收了一下东西，顺便装了个vbox玩，发现很好玩……装系统的时候无聊，弄了个魔方玩……这个是我最新发明的</p><p><a
href="http://picasaweb.google.com/Felicia1101/mOyEXD/photo#5218031612422874850"><img
src="http://lh6.ggpht.com/Felicia1101/SGosGu05ZuI/AAAAAAAADgw/rH0NhMIWeJI/s800/20080701335.jpg" /></a></p> ]]></content:encoded> <wfw:commentRss>http://gccfeli.cn/2008/07/cs-1st-term.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk
Page Caching using disk (enhanced) (user agent is rejected)
Database Caching 7/15 queries in 0.008 seconds using disk

Served from: gccfeli.cn @ 2012-02-07 14:54:46 -->
