﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-编程自动化-随笔分类-c#开发</title><link>http://www.cppblog.com/AutomateProgram/category/14011.html</link><description>当音乐和传说在深夜中沉寂后，程序的每个字符还在跳动！</description><language>zh-cn</language><lastBuildDate>Thu, 13 Sep 2012 16:24:59 GMT</lastBuildDate><pubDate>Thu, 13 Sep 2012 16:24:59 GMT</pubDate><ttl>60</ttl><item><title>c#(csharp .net)下使用json</title><link>http://www.cppblog.com/AutomateProgram/archive/2012/09/13/190502.html</link><dc:creator>漂漂</dc:creator><author>漂漂</author><pubDate>Thu, 13 Sep 2012 04:01:00 GMT</pubDate><guid>http://www.cppblog.com/AutomateProgram/archive/2012/09/13/190502.html</guid><wfw:comment>http://www.cppblog.com/AutomateProgram/comments/190502.html</wfw:comment><comments>http://www.cppblog.com/AutomateProgram/archive/2012/09/13/190502.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/AutomateProgram/comments/commentRss/190502.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/AutomateProgram/services/trackbacks/190502.html</trackback:ping><description><![CDATA[<br />到<br /><a href="http://techblog.procurios.nl/k/618/news/view/14605/14863/How-do-I-write-my-own-parser-for-JSON.html">http://techblog.procurios.nl/k/618/news/view/14605/14863/How-do-I-write-my-own-parser-for-JSON.html</a><br />下载json.cs<br /><br />使用如下：
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;jsonText&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">[{\</span><span style="color: #000000">"</span><span style="color: #000000">name\</span><span style="color: #000000">"</span><span style="color: #000000">:\</span><span style="color: #000000">"</span><span style="color: #000000">123</span><span style="color: #000000">\</span><span style="color: #000000">"</span><span style="color: #000000">,\</span><span style="color: #000000">"</span><span style="color: #000000">name2\</span><span style="color: #000000">"</span><span style="color: #000000">:[{\</span><span style="color: #000000">"</span><span style="color: #000000">ip\</span><span style="color: #000000">"</span><span style="color: #000000">:-456e8}]},{\</span><span style="color: #000000">"</span><span style="color: #000000">name\</span><span style="color: #000000">"</span><span style="color: #000000">:\</span><span style="color: #000000">"</span><span style="color: #000000">123</span><span style="color: #000000">\</span><span style="color: #000000">"</span><span style="color: #000000">,\</span><span style="color: #000000">"</span><span style="color: #000000">name2\</span><span style="color: #000000">"</span><span style="color: #000000">:[{\</span><span style="color: #000000">"</span><span style="color: #000000">ip\</span><span style="color: #000000">"</span><span style="color: #000000">:-456e1}]}]</span><span style="color: #000000">"</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ArrayList&nbsp;listInfo&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(ArrayList)JSON.JsonDecode(jsonText);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ArrayList&nbsp;listTo&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ArrayList();<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;listInfo.Count;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)<br /><img id="Codehighlighter1_317_652_Open_Image" onclick="this.style.display='none'; Codehighlighter1_317_652_Open_Text.style.display='none'; Codehighlighter1_317_652_Closed_Image.style.display='inline'; Codehighlighter1_317_652_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_317_652_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_317_652_Closed_Text.style.display='none'; Codehighlighter1_317_652_Open_Image.style.display='inline'; Codehighlighter1_317_652_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id="Codehighlighter1_317_652_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_317_652_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hashtable&nbsp;hInfo&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(Hashtable)listInfo[i];<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listTo.Add(hInfo);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">string</span><span style="color: #000000">)hInfo[</span><span style="color: #000000">"</span><span style="color: #000000">name</span><span style="color: #000000">"</span><span style="color: #000000">];<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ArrayList&nbsp;aname2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(ArrayList)hInfo[</span><span style="color: #000000">"</span><span style="color: #000000">name2</span><span style="color: #000000">"</span><span style="color: #000000">];<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hashtable&nbsp;hname2ip&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(Hashtable)aname2[</span><span style="color: #000000">0</span><span style="color: #000000">];<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;ip1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">double</span><span style="color: #000000">)hname2ip[</span><span style="color: #000000">"</span><span style="color: #000000">ip</span><span style="color: #000000">"</span><span style="color: #000000">];<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;toJson&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;toJson&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;JSON.JsonEncode(listTo);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(toJson);</span></div><br /><br />更多使用可以参考<br /><a href="http://www.json.org/">http://www.json.org/</a>&nbsp;的使用。<br /><img src ="http://www.cppblog.com/AutomateProgram/aggbug/190502.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/AutomateProgram/" target="_blank">漂漂</a> 2012-09-13 12:01 <a href="http://www.cppblog.com/AutomateProgram/archive/2012/09/13/190502.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>StreamReader 和文件乱码(转)</title><link>http://www.cppblog.com/AutomateProgram/archive/2012/05/02/173446.html</link><dc:creator>漂漂</dc:creator><author>漂漂</author><pubDate>Wed, 02 May 2012 03:22:00 GMT</pubDate><guid>http://www.cppblog.com/AutomateProgram/archive/2012/05/02/173446.html</guid><wfw:comment>http://www.cppblog.com/AutomateProgram/comments/173446.html</wfw:comment><comments>http://www.cppblog.com/AutomateProgram/archive/2012/05/02/173446.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/AutomateProgram/comments/commentRss/173446.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/AutomateProgram/services/trackbacks/173446.html</trackback:ping><description><![CDATA[原文地址：<a href="http://www.cnblogs.com/LoveJenny/archive/2012/02/08/2343297.html">http://www.cnblogs.com/LoveJenny/archive/2012/02/08/2343297.html</a><br /><br /><br /><br /><br />获取文章的编码格式:<br /><br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;Encoding&nbsp;GetEncoding(</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;filePath)<br /><img id="Codehighlighter1_60_2478_Open_Image" onclick="this.style.display='none'; Codehighlighter1_60_2478_Open_Text.style.display='none'; Codehighlighter1_60_2478_Closed_Image.style.display='inline'; Codehighlighter1_60_2478_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_60_2478_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_60_2478_Closed_Text.style.display='none'; Codehighlighter1_60_2478_Open_Image.style.display='inline'; Codehighlighter1_60_2478_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id="Codehighlighter1_60_2478_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_60_2478_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(filePath&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)<br /><img id="Codehighlighter1_108_183_Open_Image" onclick="this.style.display='none'; Codehighlighter1_108_183_Open_Text.style.display='none'; Codehighlighter1_108_183_Closed_Image.style.display='inline'; Codehighlighter1_108_183_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_108_183_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_108_183_Closed_Text.style.display='none'; Codehighlighter1_108_183_Open_Image.style.display='inline'; Codehighlighter1_108_183_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id="Codehighlighter1_108_183_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_108_183_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throw</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ArgumentNullException(</span><span style="color: #000000">"</span><span style="color: #000000">filePath</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Encoding&nbsp;encoding1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Encoding.Default;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(File.Exists(filePath))<br /><img id="Codehighlighter1_287_2438_Open_Image" onclick="this.style.display='none'; Codehighlighter1_287_2438_Open_Text.style.display='none'; Codehighlighter1_287_2438_Closed_Image.style.display='inline'; Codehighlighter1_287_2438_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_287_2438_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_287_2438_Closed_Text.style.display='none'; Codehighlighter1_287_2438_Open_Image.style.display='inline'; Codehighlighter1_287_2438_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id="Codehighlighter1_287_2438_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_287_2438_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000"><br /><img id="Codehighlighter1_325_2194_Open_Image" onclick="this.style.display='none'; Codehighlighter1_325_2194_Open_Text.style.display='none'; Codehighlighter1_325_2194_Closed_Image.style.display='inline'; Codehighlighter1_325_2194_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_325_2194_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_325_2194_Closed_Text.style.display='none'; Codehighlighter1_325_2194_Open_Image.style.display='inline'; Codehighlighter1_325_2194_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id="Codehighlighter1_325_2194_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_325_2194_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;(FileStream&nbsp;stream1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;FileStream(filePath,&nbsp;FileMode.Open,&nbsp;FileAccess.Read))<br /><img id="Codehighlighter1_453_2176_Open_Image" onclick="this.style.display='none'; Codehighlighter1_453_2176_Open_Text.style.display='none'; Codehighlighter1_453_2176_Closed_Image.style.display='inline'; Codehighlighter1_453_2176_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_453_2176_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_453_2176_Closed_Text.style.display='none'; Codehighlighter1_453_2176_Open_Image.style.display='inline'; Codehighlighter1_453_2176_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id="Codehighlighter1_453_2176_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_453_2176_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(stream1.Length&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">)<br /><img id="Codehighlighter1_527_2154_Open_Image" onclick="this.style.display='none'; Codehighlighter1_527_2154_Open_Text.style.display='none'; Codehighlighter1_527_2154_Closed_Image.style.display='inline'; Codehighlighter1_527_2154_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_527_2154_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_527_2154_Closed_Text.style.display='none'; Codehighlighter1_527_2154_Open_Image.style.display='inline'; Codehighlighter1_527_2154_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id="Codehighlighter1_527_2154_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_527_2154_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;(StreamReader&nbsp;reader1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;StreamReader(stream1,&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">))<br /><img id="Codehighlighter1_648_2128_Open_Image" onclick="this.style.display='none'; Codehighlighter1_648_2128_Open_Text.style.display='none'; Codehighlighter1_648_2128_Closed_Image.style.display='inline'; Codehighlighter1_648_2128_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_648_2128_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_648_2128_Closed_Text.style.display='none'; Codehighlighter1_648_2128_Open_Image.style.display='inline'; Codehighlighter1_648_2128_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id="Codehighlighter1_648_2128_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_648_2128_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">[]&nbsp;chArray1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">[</span><span style="color: #000000">1</span><span style="color: #000000">];<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reader1.Read(chArray1,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;encoding1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;reader1.CurrentEncoding;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reader1.BaseStream.Position&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(encoding1&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;Encoding.UTF8)<br /><img id="Codehighlighter1_1005_2098_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1005_2098_Open_Text.style.display='none'; Codehighlighter1_1005_2098_Closed_Image.style.display='inline'; Codehighlighter1_1005_2098_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_1005_2098_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1005_2098_Closed_Text.style.display='none'; Codehighlighter1_1005_2098_Open_Image.style.display='inline'; Codehighlighter1_1005_2098_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id="Codehighlighter1_1005_2098_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1005_2098_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">byte</span><span style="color: #000000">[]&nbsp;buffer1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;encoding1.GetPreamble();<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(stream1.Length&nbsp;</span><span style="color: #000000">&gt;=</span><span style="color: #000000">&nbsp;buffer1.Length)<br /><img id="Codehighlighter1_1195_1877_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1195_1877_Open_Text.style.display='none'; Codehighlighter1_1195_1877_Closed_Image.style.display='inline'; Codehighlighter1_1195_1877_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_1195_1877_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1195_1877_Closed_Text.style.display='none'; Codehighlighter1_1195_1877_Open_Image.style.display='inline'; Codehighlighter1_1195_1877_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id="Codehighlighter1_1195_1877_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1195_1877_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">byte</span><span style="color: #000000">[]&nbsp;buffer2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">byte</span><span style="color: #000000">[buffer1.Length];<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stream1.Read(buffer2,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;buffer2.Length);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;num1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;num1&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;buffer2.Length;&nbsp;num1</span><span style="color: #000000">++</span><span style="color: #000000">)<br /><img id="Codehighlighter1_1492_1839_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1492_1839_Open_Text.style.display='none'; Codehighlighter1_1492_1839_Closed_Image.style.display='inline'; Codehighlighter1_1492_1839_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_1492_1839_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1492_1839_Closed_Text.style.display='none'; Codehighlighter1_1492_1839_Open_Image.style.display='inline'; Codehighlighter1_1492_1839_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id="Codehighlighter1_1492_1839_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1492_1839_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(buffer2[num1]&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;buffer1[num1])<br /><img id="Codehighlighter1_1618_1797_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1618_1797_Open_Text.style.display='none'; Codehighlighter1_1618_1797_Closed_Image.style.display='inline'; Codehighlighter1_1618_1797_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_1618_1797_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1618_1797_Closed_Text.style.display='none'; Codehighlighter1_1618_1797_Open_Image.style.display='inline'; Codehighlighter1_1618_1797_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id="Codehighlighter1_1618_1797_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1618_1797_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;encoding1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Encoding.Default;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">break</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br /><img id="Codehighlighter1_1956_2064_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1956_2064_Open_Text.style.display='none'; Codehighlighter1_1956_2064_Closed_Image.style.display='inline'; Codehighlighter1_1956_2064_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_1956_2064_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1956_2064_Closed_Text.style.display='none'; Codehighlighter1_1956_2064_Open_Image.style.display='inline'; Codehighlighter1_1956_2064_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id="Codehighlighter1_1956_2064_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1956_2064_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;encoding1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Encoding.Default;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(Exception&nbsp;exception1)<br /><img id="Codehighlighter1_2257_2302_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2257_2302_Open_Text.style.display='none'; Codehighlighter1_2257_2302_Closed_Image.style.display='inline'; Codehighlighter1_2257_2302_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_2257_2302_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_2257_2302_Closed_Text.style.display='none'; Codehighlighter1_2257_2302_Open_Image.style.display='inline'; Codehighlighter1_2257_2302_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id="Codehighlighter1_2257_2302_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_2257_2302_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throw</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(encoding1&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)<br /><img id="Codehighlighter1_2359_2424_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2359_2424_Open_Text.style.display='none'; Codehighlighter1_2359_2424_Closed_Image.style.display='inline'; Codehighlighter1_2359_2424_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_2359_2424_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_2359_2424_Closed_Text.style.display='none'; Codehighlighter1_2359_2424_Open_Image.style.display='inline'; Codehighlighter1_2359_2424_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id="Codehighlighter1_2359_2424_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_2359_2424_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;encoding1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Encoding.UTF8;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;encoding1;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span></div><br /><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Main()<br /><img id="Codehighlighter1_26_648_Open_Image" onclick="this.style.display='none'; Codehighlighter1_26_648_Open_Text.style.display='none'; Codehighlighter1_26_648_Closed_Image.style.display='inline'; Codehighlighter1_26_648_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_26_648_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_26_648_Closed_Text.style.display='none'; Codehighlighter1_26_648_Open_Image.style.display='inline'; Codehighlighter1_26_648_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="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" id="Codehighlighter1_26_648_Closed_Text"><img alt="" src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_26_648_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;List</span><span style="color: #000000">&lt;</span><span style="color: #0000ff">string</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;lstFilePath&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;List</span><span style="color: #000000">&lt;</span><span style="color: #0000ff">string</span><span style="color: #000000">&gt;</span><span style="color: #000000">()<br /><img id="Codehighlighter1_82_204_Open_Image" onclick="this.style.display='none'; Codehighlighter1_82_204_Open_Text.style.display='none'; Codehighlighter1_82_204_Closed_Image.style.display='inline'; Codehighlighter1_82_204_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_82_204_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_82_204_Closed_Text.style.display='none'; Codehighlighter1_82_204_Open_Image.style.display='inline'; Codehighlighter1_82_204_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id="Codehighlighter1_82_204_Closed_Text"><img alt="" src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_82_204_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">H:\\TestText\\ansi.txt</span><span style="color: #000000">"</span><span style="color: #000000">,<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">H:\\TestText\\unicode.txt</span><span style="color: #000000">"</span><span style="color: #000000">,<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">H:\\TestText\\utf8.txt</span><span style="color: #000000">"</span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">foreach</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;filePath&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;lstFilePath)<br /><img id="Codehighlighter1_258_646_Open_Image" onclick="this.style.display='none'; Codehighlighter1_258_646_Open_Text.style.display='none'; Codehighlighter1_258_646_Closed_Image.style.display='inline'; Codehighlighter1_258_646_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_258_646_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_258_646_Closed_Text.style.display='none'; Codehighlighter1_258_646_Open_Image.style.display='inline'; Codehighlighter1_258_646_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id="Codehighlighter1_258_646_Closed_Text"><img alt="" src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_258_646_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;(StreamReader&nbsp;reader&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;StreamReader(filePath,&nbsp;GetEncoding(filePath)))<br /><img id="Codehighlighter1_356_640_Open_Image" onclick="this.style.display='none'; Codehighlighter1_356_640_Open_Text.style.display='none'; Codehighlighter1_356_640_Closed_Image.style.display='inline'; Codehighlighter1_356_640_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_356_640_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_356_640_Closed_Text.style.display='none'; Codehighlighter1_356_640_Open_Image.style.display='inline'; Codehighlighter1_356_640_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id="Codehighlighter1_356_640_Closed_Text"><img alt="" src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_356_640_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #000000">"</span><span style="color: #000000">读取文件</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;filePath);<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(reader.ReadToEnd());<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #000000">"</span><span style="color: #000000">当前编码：</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;reader.CurrentEncoding.EncodingName);<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #000000">"</span><span style="color: #000000">************************************************************</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span></div><br /><br /><br /><br /><img src ="http://www.cppblog.com/AutomateProgram/aggbug/173446.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/AutomateProgram/" target="_blank">漂漂</a> 2012-05-02 11:22 <a href="http://www.cppblog.com/AutomateProgram/archive/2012/05/02/173446.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c#中分割提取字符串中的英文单词</title><link>http://www.cppblog.com/AutomateProgram/archive/2011/08/09/152870.html</link><dc:creator>漂漂</dc:creator><author>漂漂</author><pubDate>Tue, 09 Aug 2011 07:55:00 GMT</pubDate><guid>http://www.cppblog.com/AutomateProgram/archive/2011/08/09/152870.html</guid><wfw:comment>http://www.cppblog.com/AutomateProgram/comments/152870.html</wfw:comment><comments>http://www.cppblog.com/AutomateProgram/archive/2011/08/09/152870.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/AutomateProgram/comments/commentRss/152870.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/AutomateProgram/services/trackbacks/152870.html</trackback:ping><description><![CDATA[发现在java中有很多示例可以提取字符串中的英文单词，二c#较少。<br /><br />c#中使用正则表达式可以实现这个功能：<br />&nbsp;<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;s&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">会说话的汤姆猫&nbsp;-&nbsp;Talking&nbsp;Tom&nbsp;Cat</span><span style="color: #000000">"</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Regex&nbsp;mRegex&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Regex(</span><span style="color: #000000">"</span><span style="color: #000000">[a-zA-Z0-9]+</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MatchCollection&nbsp;mMactchCol&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;mRegex.Matches(s);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">foreach</span><span style="color: #000000">&nbsp;(Match&nbsp;mMatch&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;mMactchCol)<br /><img id="Codehighlighter1_231_246_Open_Image" onclick="this.style.display='none'; Codehighlighter1_231_246_Open_Text.style.display='none'; Codehighlighter1_231_246_Closed_Image.style.display='inline'; Codehighlighter1_231_246_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_231_246_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_231_246_Closed_Text.style.display='none'; Codehighlighter1_231_246_Open_Image.style.display='inline'; Codehighlighter1_231_246_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id="Codehighlighter1_231_246_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_231_246_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div><br /><br /><br /><br /><img src ="http://www.cppblog.com/AutomateProgram/aggbug/152870.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/AutomateProgram/" target="_blank">漂漂</a> 2011-08-09 15:55 <a href="http://www.cppblog.com/AutomateProgram/archive/2011/08/09/152870.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c#下发送邮件代码</title><link>http://www.cppblog.com/AutomateProgram/archive/2011/06/28/149671.html</link><dc:creator>漂漂</dc:creator><author>漂漂</author><pubDate>Tue, 28 Jun 2011 10:07:00 GMT</pubDate><guid>http://www.cppblog.com/AutomateProgram/archive/2011/06/28/149671.html</guid><wfw:comment>http://www.cppblog.com/AutomateProgram/comments/149671.html</wfw:comment><comments>http://www.cppblog.com/AutomateProgram/archive/2011/06/28/149671.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/AutomateProgram/comments/commentRss/149671.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/AutomateProgram/services/trackbacks/149671.html</trackback:ping><description><![CDATA[<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;SendMail<br /><img id="Codehighlighter1_26_865_Open_Image" onclick="this.style.display='none'; Codehighlighter1_26_865_Open_Text.style.display='none'; Codehighlighter1_26_865_Closed_Image.style.display='inline'; Codehighlighter1_26_865_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_26_865_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_26_865_Closed_Text.style.display='none'; Codehighlighter1_26_865_Open_Image.style.display='inline'; Codehighlighter1_26_865_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id="Codehighlighter1_26_865_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_26_865_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Net.Mail.SmtpClient&nbsp;client&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;SmtpClient();<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Net.Mail.MailMessage&nbsp;message&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;SendMail()<br /><img id="Codehighlighter1_177_481_Open_Image" onclick="this.style.display='none'; Codehighlighter1_177_481_Open_Text.style.display='none'; Codehighlighter1_177_481_Closed_Image.style.display='inline'; Codehighlighter1_177_481_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_177_481_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_177_481_Closed_Text.style.display='none'; Codehighlighter1_177_481_Open_Image.style.display='inline'; Codehighlighter1_177_481_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id="Codehighlighter1_177_481_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_177_481_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;client.Host&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">smtp.163.com</span><span style="color: #000000">"</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;client.UseDefaultCredentials&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;client.Credentials&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;System.Net.NetworkCredential(</span><span style="color: #000000">"</span><span style="color: #000000">你的邮箱</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">密码</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;client.DeliveryMethod&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;SmtpDeliveryMethod.Network;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;MailMessage(</span><span style="color: #000000">"</span><span style="color: #000000">你的邮箱</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">对方邮箱</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;DoSend(</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;subject,&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;body)<br /><img id="Codehighlighter1_548_859_Open_Image" onclick="this.style.display='none'; Codehighlighter1_548_859_Open_Text.style.display='none'; Codehighlighter1_548_859_Closed_Image.style.display='inline'; Codehighlighter1_548_859_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_548_859_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_548_859_Closed_Text.style.display='none'; Codehighlighter1_548_859_Open_Image.style.display='inline'; Codehighlighter1_548_859_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id="Codehighlighter1_548_859_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_548_859_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message.Subject&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;subject;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message.Body&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;body;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message.BodyEncoding&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;System.Text.Encoding.UTF8;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message.IsBodyHtml&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000"><br /><img id="Codehighlighter1_751_803_Open_Image" onclick="this.style.display='none'; Codehighlighter1_751_803_Open_Text.style.display='none'; Codehighlighter1_751_803_Closed_Image.style.display='inline'; Codehighlighter1_751_803_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_751_803_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_751_803_Closed_Text.style.display='none'; Codehighlighter1_751_803_Open_Image.style.display='inline'; Codehighlighter1_751_803_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id="Codehighlighter1_751_803_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_751_803_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;client.Send(message);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000"><br /><img id="Codehighlighter1_835_849_Open_Image" onclick="this.style.display='none'; Codehighlighter1_835_849_Open_Text.style.display='none'; Codehighlighter1_835_849_Closed_Image.style.display='inline'; Codehighlighter1_835_849_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_835_849_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_835_849_Closed_Text.style.display='none'; Codehighlighter1_835_849_Open_Image.style.display='inline'; Codehighlighter1_835_849_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id="Codehighlighter1_835_849_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_835_849_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div><img src ="http://www.cppblog.com/AutomateProgram/aggbug/149671.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/AutomateProgram/" target="_blank">漂漂</a> 2011-06-28 18:07 <a href="http://www.cppblog.com/AutomateProgram/archive/2011/06/28/149671.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C# 中引用资源文件的几个方法</title><link>http://www.cppblog.com/AutomateProgram/archive/2010/12/31/137804.html</link><dc:creator>漂漂</dc:creator><author>漂漂</author><pubDate>Fri, 31 Dec 2010 07:40:00 GMT</pubDate><guid>http://www.cppblog.com/AutomateProgram/archive/2010/12/31/137804.html</guid><wfw:comment>http://www.cppblog.com/AutomateProgram/comments/137804.html</wfw:comment><comments>http://www.cppblog.com/AutomateProgram/archive/2010/12/31/137804.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/AutomateProgram/comments/commentRss/137804.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/AutomateProgram/services/trackbacks/137804.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 原文地址：http://foxhound.blogbus.com/logs/63497357.html一、常用方法(已确认):1// Correct 是资源的名字，比如 Correct.png 资源的名字即为 Correct 。2pictureBox1.Image = Properties.Resources.Correct;二、使用 ResourceManager 类的方法(已确认):01// ...&nbsp;&nbsp;<a href='http://www.cppblog.com/AutomateProgram/archive/2010/12/31/137804.html'>阅读全文</a><img src ="http://www.cppblog.com/AutomateProgram/aggbug/137804.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/AutomateProgram/" target="_blank">漂漂</a> 2010-12-31 15:40 <a href="http://www.cppblog.com/AutomateProgram/archive/2010/12/31/137804.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C# WMI 技术专贴 </title><link>http://www.cppblog.com/AutomateProgram/archive/2010/09/26/127782.html</link><dc:creator>漂漂</dc:creator><author>漂漂</author><pubDate>Sun, 26 Sep 2010 10:02:00 GMT</pubDate><guid>http://www.cppblog.com/AutomateProgram/archive/2010/09/26/127782.html</guid><wfw:comment>http://www.cppblog.com/AutomateProgram/comments/127782.html</wfw:comment><comments>http://www.cppblog.com/AutomateProgram/archive/2010/09/26/127782.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/AutomateProgram/comments/commentRss/127782.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/AutomateProgram/services/trackbacks/127782.html</trackback:ping><description><![CDATA[<p>原文地址：<a href="http://www.cnblogs.com/smallvv/">http://www.cnblogs.com/smallvv/</a></p>
<img src ="http://www.cppblog.com/AutomateProgram/aggbug/127782.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/AutomateProgram/" target="_blank">漂漂</a> 2010-09-26 18:02 <a href="http://www.cppblog.com/AutomateProgram/archive/2010/09/26/127782.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>浅谈USB设备的VID和PID</title><link>http://www.cppblog.com/AutomateProgram/archive/2010/09/16/126765.html</link><dc:creator>漂漂</dc:creator><author>漂漂</author><pubDate>Thu, 16 Sep 2010 06:48:00 GMT</pubDate><guid>http://www.cppblog.com/AutomateProgram/archive/2010/09/16/126765.html</guid><wfw:comment>http://www.cppblog.com/AutomateProgram/comments/126765.html</wfw:comment><comments>http://www.cppblog.com/AutomateProgram/archive/2010/09/16/126765.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/AutomateProgram/comments/commentRss/126765.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/AutomateProgram/services/trackbacks/126765.html</trackback:ping><description><![CDATA[<p>原文地址：<a href="http://www.xqlab.com/html/y2009/319.html">http://www.xqlab.com/html/y2009/319.html</a><br><br></p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 根据<span style="COLOR: #ff0000">USB</span>规范的规定，所有的USB设备都有供应商ID（<span style="COLOR: #ff0000">VID</span>）和产品识别码（<span style="COLOR: #ff0000">PID</span>），主机通过不同的VID和PID来区别不同的设备，VID和PID都是两个字节长，其中，供应商ID（VID）由供应商向USB执行论坛申请，每个供应商的VID是唯一的，PID由供应商自行决定，理论上来说，不同的产品、相同产品的不同型号、相同型号的不同设计的产品最好采用不同的PID，以便区别相同厂家的不同设备。
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VID和PID通常情况下有两种存储方式，第一种是主控生产商的VID和PID，存储在主控的bootcode中；第二种是设备生产商的VID和PID，该VID和PID存储在主控外部的非易失性存储设备中（<span style="COLOR: #ff0000">EEPROM</span>或<span style="COLOR: #ff0000">Flash</span>）的设备固件中，当USB设备连接主机时，如果固件中有设备生产商的VID和PID，会将该VID和PID报告给主机，而忽略主控生产商的VID和PID。所以理论上一个USB存储设备的VID应该是设备生产商的VID，而不是主控生产商的VID，这两个VID应该是不同的（主控生产商自己生产的设备除外）。</p>
<p>&nbsp; &nbsp;&nbsp; &nbsp;由于VID和PID重复并不会对产品的使用带来严重影响，很多USB设备生产商（山寨厂居多）为了方便，并不会向USB执行论坛申请自己的VID，而是依然沿用主控生产商的VID或随便向产品写入VID和PID；同时，<span style="COLOR: #ff0000">正规厂家只需要申请VID</span>，<span style="COLOR: #ff0000">PID由厂家自行确定</span>，所以存在相同型号的产品，可能采用了不同的主控（商业需要，很正常），而他们的PID是一样的，基于上述原因通过VID和PID就不能准确识别USB设备的主控型号，这个问题大家在使用USB设备的过程中需要注意。</p>
<img src ="http://www.cppblog.com/AutomateProgram/aggbug/126765.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/AutomateProgram/" target="_blank">漂漂</a> 2010-09-16 14:48 <a href="http://www.cppblog.com/AutomateProgram/archive/2010/09/16/126765.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在.NET中探测U盘的插入/拔出(C#实现)</title><link>http://www.cppblog.com/AutomateProgram/archive/2010/09/16/126753.html</link><dc:creator>漂漂</dc:creator><author>漂漂</author><pubDate>Thu, 16 Sep 2010 05:41:00 GMT</pubDate><guid>http://www.cppblog.com/AutomateProgram/archive/2010/09/16/126753.html</guid><wfw:comment>http://www.cppblog.com/AutomateProgram/comments/126753.html</wfw:comment><comments>http://www.cppblog.com/AutomateProgram/archive/2010/09/16/126753.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/AutomateProgram/comments/commentRss/126753.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/AutomateProgram/services/trackbacks/126753.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;原文地址：http://www.cnblogs.com/AndyHai/archive/2007/07/25/830224.html有同学向我问这个问题，于是就Google了一下找到答案，不过是C下的，我将其改编成了C#的。　　当设备被插入/拔出的时候，WINDOWS会向每个窗体发送WM_DEVICECHANGE 消息，当消息的wParam 值等于 DBT_DEVICEARRIVA...&nbsp;&nbsp;<a href='http://www.cppblog.com/AutomateProgram/archive/2010/09/16/126753.html'>阅读全文</a><img src ="http://www.cppblog.com/AutomateProgram/aggbug/126753.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/AutomateProgram/" target="_blank">漂漂</a> 2010-09-16 13:41 <a href="http://www.cppblog.com/AutomateProgram/archive/2010/09/16/126753.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>硬件检测：安装、停用、usb设备检查 和c#实现</title><link>http://www.cppblog.com/AutomateProgram/archive/2010/09/13/126529.html</link><dc:creator>漂漂</dc:creator><author>漂漂</author><pubDate>Mon, 13 Sep 2010 13:27:00 GMT</pubDate><guid>http://www.cppblog.com/AutomateProgram/archive/2010/09/13/126529.html</guid><wfw:comment>http://www.cppblog.com/AutomateProgram/comments/126529.html</wfw:comment><comments>http://www.cppblog.com/AutomateProgram/archive/2010/09/13/126529.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/AutomateProgram/comments/commentRss/126529.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/AutomateProgram/services/trackbacks/126529.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 原文地址：http://www.cnblogs.com/SunYu/archive/2010/04/29/1723977.htmlcodeproject：http://www.codeproject.com/KB/system/HwDetect.aspx&nbsp;简介现在对于IT的安全来说，热插拨设备是个很大的威胁。在这篇文章中，我将试着开发一个用户应用程序来检测本机系统上的设备改变...&nbsp;&nbsp;<a href='http://www.cppblog.com/AutomateProgram/archive/2010/09/13/126529.html'>阅读全文</a><img src ="http://www.cppblog.com/AutomateProgram/aggbug/126529.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/AutomateProgram/" target="_blank">漂漂</a> 2010-09-13 21:27 <a href="http://www.cppblog.com/AutomateProgram/archive/2010/09/13/126529.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>线程之间的通讯 UI 通讯 SynchronizationContext 使用</title><link>http://www.cppblog.com/AutomateProgram/archive/2010/09/07/126081.html</link><dc:creator>漂漂</dc:creator><author>漂漂</author><pubDate>Tue, 07 Sep 2010 04:10:00 GMT</pubDate><guid>http://www.cppblog.com/AutomateProgram/archive/2010/09/07/126081.html</guid><wfw:comment>http://www.cppblog.com/AutomateProgram/comments/126081.html</wfw:comment><comments>http://www.cppblog.com/AutomateProgram/archive/2010/09/07/126081.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/AutomateProgram/comments/commentRss/126081.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/AutomateProgram/services/trackbacks/126081.html</trackback:ping><description><![CDATA[原文地址：<a href="http://www.cnblogs.com/Kevin-moon/archive/2009/01/13/1374353.html">http://www.cnblogs.com/Kevin-moon/archive/2009/01/13/1374353.html</a><br><br>&nbsp;过年前的这段时间真是舒服，没有了平时项目发版的紧张，剩下的就是只有在网上闲逛了，哈哈！<img style="WIDTH: 46px; HEIGHT: 46px" alt="" src="http://www.cnblogs.com/Emoticons/face/020.gif" width=46 height=46><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;今天早上闲逛的时候，在CodeProject发现了个不错的文章，英文好的直接去<a style="FONT-SIZE: 10pt" href="http://www.codeproject.com/KB/threads/SynchronizationContext.aspx"><u><font color=#800080>http://www.codeproject.com/KB/threads/SynchronizationContext.aspx</font></u></a>看吧，不好，就将就的看下我的吧，呵呵！(没有直接翻译，不过大概的思路相同)<br><br>
<p><em><span style="COLOR: #800000"><span style="COLOR: #000080"><span style="COLOR: #99cc00"><span style="COLOR: #800080"><span style="COLOR: #000000">理解SynchronizationContext
<hr>
</span></span></span></span></span></em><span style="FONT-SIZE: x-small"><span style="COLOR: #888888">　　SynchronizationContext 类是一个基类，可提供不带同步的自由线程上下文。 此类实现的同步模型的目的是使公共语言运行库内部的异步/同步操作能够针对不同的异步模型采取正确的行为。此模型还简化了托管应用程序为在不同的同步环境下正常工作而必须遵循的一些要求。同步模型的提供程序可以扩展此类并为这些方法提供自己的实现。(来自MSDN)</span></span><br>　　简而言之就是允许一个线程和另外一个线程进行通讯，SynchronizationContext在通讯中充当传输者的角色。另外这里有个地方需要清楚的，不是每个线程都附加SynchronizationContext这个对象，只有UI线程是一直拥有的。<br>　　这里你可能有个问题：对于UI线程来说，是如何将SynchronizationContext这个对象附加到线程上的呢？！OK，我们先从下面的代码开始，
<p>&nbsp;</p>
<div class=cnblogs_code><span id=Code_Open_Text_162849><span style="COLOR: #000000">[STAThread]<br></span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;Application.EnableVisualStyles();<br>&nbsp;&nbsp;&nbsp;&nbsp;Application.SetCompatibleTextRenderingDefault(</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;let's&nbsp;check&nbsp;the&nbsp;context&nbsp;here</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;context&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;SynchronizationContext.Current;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(context&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">No&nbsp;context&nbsp;for&nbsp;this&nbsp;thread</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">We&nbsp;got&nbsp;a&nbsp;context</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;create&nbsp;a&nbsp;form</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Form1&nbsp;form&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Form1();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;let's&nbsp;check&nbsp;it&nbsp;again&nbsp;after&nbsp;creating&nbsp;a&nbsp;form</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;context&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;SynchronizationContext.Current;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(context&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">No&nbsp;context&nbsp;for&nbsp;this&nbsp;thread</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">We&nbsp;got&nbsp;a&nbsp;context</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(context&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">No&nbsp;context&nbsp;for&nbsp;this&nbsp;thread</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;Application.Run(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Form1());<br>}<br></span></span></div>
<p>运行结果：<br><span style="FONT-SIZE: x-small"><span style="COLOR: #888888">1、No context for this thread<br>2、We got a context</span></span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;从运行结果来看，在Form1 form = new Form1()之前，SynchronizationContext对象是为空，而当实例化Form1窗体后，SynchronizationContext对象就被附加到这个线程上了。所以可以得出答案了：当Control对象被创建的同时，SynchronizationContext对象也会被创建并附加到线程上。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;好的，我们既然已经基本了解了SynchronizationContext，接下来的事情就是使用它了！<br><br><em><span style="COLOR: #000000">如何使用SynchronizationContext
<hr>
</span></em>　　应用程序有两个线程：线程A和线程B，不过线程B比较特殊，它属于UI线程，当这两个线程同时运行的时候，线程A有个需求："修改UI对象的属性"，这时候如果你是线程A，你会如何去完成需求呢？！<br><u><br><em>第一种方式：</em></u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在线程A上面直接去操作UI对象，这是线程B说："线程A，你真xx，你不知道我的特殊嘛！"，然后直接抛给线程A一个异常信息，线程A得到异常后，一脸的无辜和无奈.....!<br><br><u><em>第二种方式：</em></u><br>　　<span style="FONT-FAMILY: Courier New">InvokeRequired？！是的，当然没问题。(<span style="COLOR: #808080; FONT-SIZE: 10pt">解释下，InvokeRequired属性是每个Control对象都具有的属性，它会返回true和false，当是true的时候，表示它在另外一个线程上面，这是必须通过Invoke,BeginInvoke这些方法来调用更新UI对象的方法，当是false的时候，有两种情况，1：位于当前线程上面，可以通过直接去调用修改UI对象的方法，2：位于不同的线程上，不过控件或窗体的句柄不存在。对于句柄是否存在的判断，可以通过IsHandleCreated来获取，如果句柄不存在，是不能调用Invoke...这些方法的，这时候你必须等待句柄的创建</span>）<br>通过InvokeRequired的实现方式如下：<br>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System;<br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Drawing;<br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Windows.Forms;<br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Threading;<br><br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;MyFormControl&nbsp;:&nbsp;Form<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">delegate</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;AddListItem(String&nbsp;myString);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;AddListItem&nbsp;myDelegate;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;Button&nbsp;myButton;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;Thread&nbsp;myThread;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;ListBox&nbsp;myListBox;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;MyFormControl()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myButton&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Button();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myListBox&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;ListBox();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myButton.Location&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Point(</span><span style="COLOR: #800080">72</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">160</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myButton.Size&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Size(</span><span style="COLOR: #800080">152</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">32</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myButton.TabIndex&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myButton.Text&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">Add&nbsp;items&nbsp;in&nbsp;list&nbsp;box</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myButton.Click&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;EventHandler(Button_Click);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myListBox.Location&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Point(</span><span style="COLOR: #800080">48</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">32</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myListBox.Name&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">myListBox</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myListBox.Size&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Size(</span><span style="COLOR: #800080">200</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">95</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myListBox.TabIndex&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">2</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClientSize&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Size(</span><span style="COLOR: #800080">292</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #800080">273</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Controls.AddRange(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Control[]&nbsp;{myListBox,myButton});<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Text&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">&nbsp;'Control_Invoke'&nbsp;example&nbsp;</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myDelegate&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;AddListItem(AddListItemMethod);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Main()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyFormControl&nbsp;myForm&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;MyFormControl();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myForm.ShowDialog();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;AddListItemMethod(String&nbsp;myString)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myListBox.Items.Add(myString);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Button_Click(</span><span style="COLOR: #0000ff">object</span><span style="COLOR: #000000">&nbsp;sender,&nbsp;EventArgs&nbsp;e)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myThread&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Thread(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;ThreadStart(ThreadFunction));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myThread.Start();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;ThreadFunction()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyThreadClass&nbsp;myThreadClassObject&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;MyThreadClass(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myThreadClassObject.Run();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;MyThreadClass<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyFormControl&nbsp;myFormControl1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;MyThreadClass(MyFormControl&nbsp;myForm)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myFormControl1&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;myForm;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;myString;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Run()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">5</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myString&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">Step&nbsp;number&nbsp;</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;i.ToString()&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">&nbsp;executed</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.Sleep(</span><span style="COLOR: #800080">400</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Execute&nbsp;the&nbsp;specified&nbsp;delegate&nbsp;on&nbsp;the&nbsp;thread&nbsp;that&nbsp;owns<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;'myFormControl1'&nbsp;control's&nbsp;underlying&nbsp;window&nbsp;handle&nbsp;with<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;the&nbsp;specified&nbsp;list&nbsp;of&nbsp;arguments.</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myFormControl1.Invoke(myFormControl1.myDelegate,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Object[]&nbsp;{myString});<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;}</span></div>
<br>&nbsp;&nbsp;&nbsp;&nbsp;不过这里存在一个有争论的地方：这种方式必须通过调用Control的Invoke方法来实现，这就是说调用的地方必须有一个Control的引用存在。 <br></span><font face=宋体>　　看下MyThreadClass类，这个类中就存在MyFormControl的引用对象。其实如果这个类放在这里是没有任务不妥之处的，但是如果把MyThreadClass类放在业务层，这时候问题就出现了，从设计角度来说，业务层是不允许和UI有任何关系，所以MyFormControl的引用对象绝对不能存在于MyThreadClass类，但是不让它存在，更新UI控件的需求就满足不了，这种情况下，我们如何做到一种最佳方案呢！？<br><br><em><u>第三种方式：</u></em><br>　　本文的主角：SynchronizationContext登场了。解释之前，先让下面的代码做下铺垫， <br></font>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">partial</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Form1&nbsp;:&nbsp;Form<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;Form1()<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InitializeComponent();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;mToolStripButtonThreads_Click(</span><span style="COLOR: #0000ff">object</span><span style="COLOR: #000000">&nbsp;sender,&nbsp;EventArgs&nbsp;e)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;let's&nbsp;see&nbsp;the&nbsp;thread&nbsp;id</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;id&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Thread.CurrentThread.ManagedThreadId;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Trace.WriteLine(</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">mToolStripButtonThreads_Click&nbsp;thread:&nbsp;</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;id);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;grab&nbsp;the&nbsp;sync&nbsp;context&nbsp;associated&nbsp;to&nbsp;this<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;thread&nbsp;(the&nbsp;UI&nbsp;thread),&nbsp;and&nbsp;save&nbsp;it&nbsp;in&nbsp;uiContext<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;note&nbsp;that&nbsp;this&nbsp;context&nbsp;is&nbsp;set&nbsp;by&nbsp;the&nbsp;UI&nbsp;thread<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;during&nbsp;Form&nbsp;creation&nbsp;(outside&nbsp;of&nbsp;your&nbsp;control)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;also&nbsp;note,&nbsp;that&nbsp;not&nbsp;every&nbsp;thread&nbsp;has&nbsp;a&nbsp;sync&nbsp;context&nbsp;attached&nbsp;to&nbsp;it.</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SynchronizationContext&nbsp;uiContext&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;SynchronizationContext.Current;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;create&nbsp;a&nbsp;thread&nbsp;and&nbsp;associate&nbsp;it&nbsp;to&nbsp;the&nbsp;run&nbsp;method</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread&nbsp;thread&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Thread(Run);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;start&nbsp;the&nbsp;thread,&nbsp;and&nbsp;pass&nbsp;it&nbsp;the&nbsp;UI&nbsp;context,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;so&nbsp;this&nbsp;thread&nbsp;will&nbsp;be&nbsp;able&nbsp;to&nbsp;update&nbsp;the&nbsp;UI<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;from&nbsp;within&nbsp;the&nbsp;thread</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;thread.Start(uiContext);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Run(</span><span style="COLOR: #0000ff">object</span><span style="COLOR: #000000">&nbsp;state)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;lets&nbsp;see&nbsp;the&nbsp;thread&nbsp;id</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;id&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Thread.CurrentThread.ManagedThreadId;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Trace.WriteLine(</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">Run&nbsp;thread:&nbsp;</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;id);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;grab&nbsp;the&nbsp;context&nbsp;from&nbsp;the&nbsp;state</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SynchronizationContext&nbsp;uiContext&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;state&nbsp;</span><span style="COLOR: #0000ff">as</span><span style="COLOR: #000000">&nbsp;SynchronizationContext;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">1000</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;normally&nbsp;you&nbsp;would&nbsp;do&nbsp;some&nbsp;code&nbsp;here<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;to&nbsp;grab&nbsp;items&nbsp;from&nbsp;the&nbsp;database.&nbsp;or&nbsp;some&nbsp;long<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;computation</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.Sleep(</span><span style="COLOR: #800080">10</span><span style="COLOR: #000000">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;use&nbsp;the&nbsp;ui&nbsp;context&nbsp;to&nbsp;execute&nbsp;the&nbsp;UpdateUI&nbsp;method,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;this&nbsp;insure&nbsp;that&nbsp;the&nbsp;UpdateUI&nbsp;method&nbsp;will&nbsp;run&nbsp;on&nbsp;the&nbsp;UI&nbsp;thread.</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uiContext.Post(UpdateUI,&nbsp;</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">line&nbsp;</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;i.ToString());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;summary&gt;</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;This&nbsp;method&nbsp;is&nbsp;executed&nbsp;on&nbsp;the&nbsp;main&nbsp;UI&nbsp;thread.<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;/summary&gt;</span><span style="COLOR: #808080"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;UpdateUI(</span><span style="COLOR: #0000ff">object</span><span style="COLOR: #000000">&nbsp;state)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;id&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Thread.CurrentThread.ManagedThreadId;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Trace.WriteLine(</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">UpdateUI&nbsp;thread:</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;id);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;text&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;state&nbsp;</span><span style="COLOR: #0000ff">as</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mListBox.Items.Add(text);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span></div>
<br>
<p>运行结果：</p>
<div class=cnblogs_code><span id=Code_Open_Text_170823><span style="COLOR: #000000">mToolStripButtonThreads_Click&nbsp;thread:&nbsp;</span><span style="COLOR: #800080">10</span><span style="COLOR: #000000"><br>Run&nbsp;thread:&nbsp;</span><span style="COLOR: #800080">3</span><span style="COLOR: #000000"><br>UpdateUI&nbsp;thread:</span><span style="COLOR: #800080">10</span><span style="COLOR: #000000"><br>UpdateUI&nbsp;thread:</span><span style="COLOR: #800080">10</span><span style="COLOR: #000000"><br>UpdateUI&nbsp;thread:</span><span style="COLOR: #800080">10</span><span style="COLOR: #000000"><br>UpdateUI&nbsp;thread:</span><span style="COLOR: #800080">10</span><span style="COLOR: #000000"><br><img alt="" src="http://images.cnblogs.com/dot.gif">&nbsp;(x1000&nbsp;times)</span></span></div>
<span style="FONT-FAMILY: Courier New">
<p>&nbsp;&nbsp;&nbsp;&nbsp;程序首先在Form1窗体的mToolStripButtonThreads_Click事件中，获取当前的SynchronizationContext对象，然后启动另外一个线程，并且将SynchronizationContext对象传递给启动的线程，启动的线程通过SynchronizationContext对象的Post方法来调用一个委托方法UpdateUI，因为UpdateUI是执行在主UI线程上的，所以可以通过它来修改UI上对象的信息。<br>&nbsp;&nbsp;&nbsp;&nbsp;怎么样！不错吧，现在我们可以把Control引用给抛弃了，哈哈！<br>&nbsp;&nbsp;&nbsp; 如果你去查下MSDN，会发现SynchronizationContext还有一个Send方法，Send和Post有什么区别？<br><br><span class=identifier><em><span style="COLOR: #000000">Send VS Post,以及异常处理
<hr>
</span></em>首先看下异常处理的情况</span>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Run(</span><span style="COLOR: #0000ff">object</span><span style="COLOR: #000000">&nbsp;state)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;let's&nbsp;see&nbsp;the&nbsp;thread&nbsp;id</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;id&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Thread.CurrentThread.ManagedThreadId;<br>&nbsp;&nbsp;&nbsp;&nbsp;Trace.WriteLine(</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">Run&nbsp;thread:&nbsp;</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;id);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;grab&nbsp;the&nbsp;context&nbsp;from&nbsp;the&nbsp;state</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;SynchronizationContext&nbsp;uiContext&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;state&nbsp;</span><span style="COLOR: #0000ff">as</span><span style="COLOR: #000000">&nbsp;SynchronizationContext;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">1000</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Trace.WriteLine(</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">Loop&nbsp;</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;i.ToString());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;normally&nbsp;you&nbsp;would&nbsp;do&nbsp;some&nbsp;code&nbsp;here<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;to&nbsp;grab&nbsp;items&nbsp;from&nbsp;the&nbsp;database.&nbsp;or&nbsp;some&nbsp;long<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;computation</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.Sleep(</span><span style="COLOR: #800080">10</span><span style="COLOR: #000000">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;use&nbsp;the&nbsp;ui&nbsp;context&nbsp;to&nbsp;execute&nbsp;the&nbsp;UpdateUI&nbsp;method,&nbsp;this&nbsp;insure&nbsp;that&nbsp;the<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;UpdateUI&nbsp;method&nbsp;will&nbsp;run&nbsp;on&nbsp;the&nbsp;UI&nbsp;thread.</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uiContext.Send(UpdateUI,&nbsp;</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">line&nbsp;</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;i.ToString());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">&nbsp;(Exception&nbsp;e)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Trace.WriteLine(e.Message);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br><br></span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;summary&gt;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;This&nbsp;method&nbsp;is&nbsp;executed&nbsp;on&nbsp;the&nbsp;main&nbsp;UI&nbsp;thread.<br></span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;/summary&gt;</span><span style="COLOR: #808080"><br></span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;UpdateUI(</span><span style="COLOR: #0000ff">object</span><span style="COLOR: #000000">&nbsp;state)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">throw</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Exception(</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">Boom</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">);<br>}</span></div>
<span style="FONT-FAMILY: Courier New"><font face="Courier New"><span class=identifier>
<p>　　 当你运行的时候， 你可能希望在UI线程上面去抛出，但是结果往往出忽你的意料，异常信息都在Run方法的线程上被捕获了。这时候你可能想问：WHY？！<br>　　 解释之前，我们先看下，Send VS Post的结果:<br>　　 <span style="FONT-SIZE: x-small"><span style="COLOR: #808080">Send 方法启动一个同步请求以发送消息<br>　　 Post 方法启动一个异步请求以发送消息。&nbsp;&nbsp;&nbsp;&nbsp;<br><span style="COLOR: #000000">　　 哈哈，异常处理的答案迎韧而解了吧！<br><br>&nbsp;&nbsp;&nbsp; 今天就写到这里吧，下一篇和大家讨论下<span class=identifier>SynchronizationContext是否在所有线程中都适用...</span></span><br></span></span></span></font></span></span><font face=宋体>&nbsp;</font></p>
<img src ="http://www.cppblog.com/AutomateProgram/aggbug/126081.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/AutomateProgram/" target="_blank">漂漂</a> 2010-09-07 12:10 <a href="http://www.cppblog.com/AutomateProgram/archive/2010/09/07/126081.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>委托的Invoke 和 BeginInvoke 与Control的Invoke和BeginInvoke</title><link>http://www.cppblog.com/AutomateProgram/archive/2010/09/06/126031.html</link><dc:creator>漂漂</dc:creator><author>漂漂</author><pubDate>Mon, 06 Sep 2010 10:40:00 GMT</pubDate><guid>http://www.cppblog.com/AutomateProgram/archive/2010/09/06/126031.html</guid><wfw:comment>http://www.cppblog.com/AutomateProgram/comments/126031.html</wfw:comment><comments>http://www.cppblog.com/AutomateProgram/archive/2010/09/06/126031.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/AutomateProgram/comments/commentRss/126031.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/AutomateProgram/services/trackbacks/126031.html</trackback:ping><description><![CDATA[<p>原文地址：<a href="http://www.cnblogs.com/yuxuanji/archive/2009/07/09/1519605.html">http://www.cnblogs.com/yuxuanji/archive/2009/07/09/1519605.html</a></p>
<img src ="http://www.cppblog.com/AutomateProgram/aggbug/126031.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/AutomateProgram/" target="_blank">漂漂</a> 2010-09-06 18:40 <a href="http://www.cppblog.com/AutomateProgram/archive/2010/09/06/126031.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C#中使用FileSystemWatcher检测文件变化</title><link>http://www.cppblog.com/AutomateProgram/archive/2010/09/06/126029.html</link><dc:creator>漂漂</dc:creator><author>漂漂</author><pubDate>Mon, 06 Sep 2010 09:45:00 GMT</pubDate><guid>http://www.cppblog.com/AutomateProgram/archive/2010/09/06/126029.html</guid><wfw:comment>http://www.cppblog.com/AutomateProgram/comments/126029.html</wfw:comment><comments>http://www.cppblog.com/AutomateProgram/archive/2010/09/06/126029.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/AutomateProgram/comments/commentRss/126029.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/AutomateProgram/services/trackbacks/126029.html</trackback:ping><description><![CDATA[<div>原文地址：<a href="http://seanli888.blog.51cto.com/345958/112276">http://seanli888.blog.51cto.com/345958/112276</a><br>.<br>Net提供了FileSystemWatcher类用于实现文件监控功能。</div>
<div>FileSystemWatcher位于System.IO名称空间下，使用前需using System.IO;</div>
<div>&nbsp;</div>
<div>FileSystemWatcher可以监控指定目录下的文件删除，创建，重命名等操作。在其构造函数中可以指定需要监控的目录以及需要监控的特定文件类型。</div>
<div>其Created事件在指定目录下创建文件的时候触发。</div>
<div>然而在实际应用中我们常常需要在需要监控的目录中文件创建完成时才作出相应的处理，而这个事件是在有文件创建的时候就触发的，这在处理大文件的时候就容易出错，因为文件还没创建完成，比如复制一个大文件。这时候我们需要对创建的文件进行访问的时候就会出现无法打开文件的异常。</div>
<div>很多网友都是通过循环检查创建的文件大小变化来判断文件是否完成的，这样带来了很大的系统性能损耗，而且不稳定。</div>
<div>其实我们可以使用一个变通的办法，那就是在创建完大文件的时候创建一个同名的特定类型的小文件，前面我们已经说到FileSystemWatcher类是可以指定监控特定类型的文件的，所以我们就可以安全的处理创建的文件了。</div>
<div>FileSystemWatcher fsw = new FileSystemWatcher(@"D:\aaa");<br>fsw.Created += new FileSystemEventHandler(fsw_Created);</div>
<div><br><br>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Collections.Generic;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.ComponentModel;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Data;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Drawing;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Text;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Windows.Forms;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.IO;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;FileWatch<br><img id=Codehighlighter1_203_2241_Open_Image onclick="this.style.display='none'; Codehighlighter1_203_2241_Open_Text.style.display='none'; Codehighlighter1_203_2241_Closed_Image.style.display='inline'; Codehighlighter1_203_2241_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_203_2241_Closed_Image onclick="this.style.display='none'; Codehighlighter1_203_2241_Closed_Text.style.display='none'; Codehighlighter1_203_2241_Open_Image.style.display='inline'; Codehighlighter1_203_2241_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="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" id=Codehighlighter1_203_2241_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_203_2241_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;partial&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;FileWatch&nbsp;:&nbsp;Form<br><img id=Codehighlighter1_251_2239_Open_Image onclick="this.style.display='none'; Codehighlighter1_251_2239_Open_Text.style.display='none'; Codehighlighter1_251_2239_Closed_Image.style.display='inline'; Codehighlighter1_251_2239_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_251_2239_Closed_Image onclick="this.style.display='none'; Codehighlighter1_251_2239_Closed_Text.style.display='none'; Codehighlighter1_251_2239_Open_Image.style.display='inline'; Codehighlighter1_251_2239_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id=Codehighlighter1_251_2239_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_251_2239_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_261_340_Closed_Image onclick="this.style.display='none'; Codehighlighter1_261_340_Closed_Text.style.display='none'; Codehighlighter1_261_340_Open_Image.style.display='inline'; Codehighlighter1_261_340_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif"><img style="DISPLAY: none" id=Codehighlighter1_261_340_Open_Image onclick="this.style.display='none'; Codehighlighter1_261_340_Open_Text.style.display='none'; Codehighlighter1_261_340_Closed_Image.style.display='inline'; Codehighlighter1_261_340_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_261_340_Closed_Text>全局变量</span><span style="DISPLAY: none" id=Codehighlighter1_261_340_Open_Text><span style="COLOR: #0000ff">#region</span><span style="COLOR: #000000">&nbsp;全局变量</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;FileSystemWatcher&nbsp;mWatch&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">#endregion</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img id=Codehighlighter1_351_1278_Closed_Image onclick="this.style.display='none'; Codehighlighter1_351_1278_Closed_Text.style.display='none'; Codehighlighter1_351_1278_Open_Image.style.display='inline'; Codehighlighter1_351_1278_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif"><img style="DISPLAY: none" id=Codehighlighter1_351_1278_Open_Image onclick="this.style.display='none'; Codehighlighter1_351_1278_Open_Text.style.display='none'; Codehighlighter1_351_1278_Closed_Image.style.display='inline'; Codehighlighter1_351_1278_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_351_1278_Closed_Text>窗体事件</span><span style="DISPLAY: none" id=Codehighlighter1_351_1278_Open_Text><span style="COLOR: #0000ff">#region</span><span style="COLOR: #000000">&nbsp;窗体事件</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;FileWatch()<br><img id=Codehighlighter1_399_733_Open_Image onclick="this.style.display='none'; Codehighlighter1_399_733_Open_Text.style.display='none'; Codehighlighter1_399_733_Closed_Image.style.display='inline'; Codehighlighter1_399_733_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_399_733_Closed_Image onclick="this.style.display='none'; Codehighlighter1_399_733_Closed_Text.style.display='none'; Codehighlighter1_399_733_Open_Image.style.display='inline'; Codehighlighter1_399_733_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id=Codehighlighter1_399_733_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_399_733_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InitializeComponent();<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.mWatch&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;FileSystemWatcher();<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.mWatch.Changed&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;FileSystemEventHandler(mWatch_Changed);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.mWatch.Created&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;FileSystemEventHandler(mWatch_Created);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.mWatch.Deleted&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;FileSystemEventHandler(mWatch_Deleted);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;btnSelectPath_Click(</span><span style="COLOR: #0000ff">object</span><span style="COLOR: #000000">&nbsp;sender,&nbsp;EventArgs&nbsp;e)<br><img id=Codehighlighter1_812_1259_Open_Image onclick="this.style.display='none'; Codehighlighter1_812_1259_Open_Text.style.display='none'; Codehighlighter1_812_1259_Closed_Image.style.display='inline'; Codehighlighter1_812_1259_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_812_1259_Closed_Image onclick="this.style.display='none'; Codehighlighter1_812_1259_Closed_Text.style.display='none'; Codehighlighter1_812_1259_Open_Image.style.display='inline'; Codehighlighter1_812_1259_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id=Codehighlighter1_812_1259_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_812_1259_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FolderBrowserDialog&nbsp;dlg&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;FolderBrowserDialog();<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(dlg.ShowDialog()&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;DialogResult.OK)<br><img id=Codehighlighter1_944_1249_Open_Image onclick="this.style.display='none'; Codehighlighter1_944_1249_Open_Text.style.display='none'; Codehighlighter1_944_1249_Closed_Image.style.display='inline'; Codehighlighter1_944_1249_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_944_1249_Closed_Image onclick="this.style.display='none'; Codehighlighter1_944_1249_Closed_Text.style.display='none'; Codehighlighter1_944_1249_Open_Image.style.display='inline'; Codehighlighter1_944_1249_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id=Codehighlighter1_944_1249_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_944_1249_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.mWatch.Path&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;dlg.SelectedPath;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.mWatch.NotifyFilter&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NotifyFilters.LastAccess&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;NotifyFilters.DirectoryName&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;NotifyFilters.FileName;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.textBoxPath.Text&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;dlg.SelectedPath;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.mWatch.EnableRaisingEvents&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">#endregion</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img id=Codehighlighter1_1289_1698_Closed_Image onclick="this.style.display='none'; Codehighlighter1_1289_1698_Closed_Text.style.display='none'; Codehighlighter1_1289_1698_Open_Image.style.display='inline'; Codehighlighter1_1289_1698_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif"><img style="DISPLAY: none" id=Codehighlighter1_1289_1698_Open_Image onclick="this.style.display='none'; Codehighlighter1_1289_1698_Open_Text.style.display='none'; Codehighlighter1_1289_1698_Closed_Image.style.display='inline'; Codehighlighter1_1289_1698_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_1289_1698_Closed_Text>变化UI</span><span style="DISPLAY: none" id=Codehighlighter1_1289_1698_Open_Text><span style="COLOR: #0000ff">#region</span><span style="COLOR: #000000">&nbsp;变化UI</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">delegate</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;ShowInfoHandler(String&nbsp;str);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;ShowInfo(</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;strInfo)<br><img id=Codehighlighter1_1415_1679_Open_Image onclick="this.style.display='none'; Codehighlighter1_1415_1679_Open_Text.style.display='none'; Codehighlighter1_1415_1679_Closed_Image.style.display='inline'; Codehighlighter1_1415_1679_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_1415_1679_Closed_Image onclick="this.style.display='none'; Codehighlighter1_1415_1679_Closed_Text.style.display='none'; Codehighlighter1_1415_1679_Open_Image.style.display='inline'; Codehighlighter1_1415_1679_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id=Codehighlighter1_1415_1679_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1415_1679_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.InvokeRequired)<br><img id=Codehighlighter1_1466_1571_Open_Image onclick="this.style.display='none'; Codehighlighter1_1466_1571_Open_Text.style.display='none'; Codehighlighter1_1466_1571_Closed_Image.style.display='inline'; Codehighlighter1_1466_1571_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_1466_1571_Closed_Image onclick="this.style.display='none'; Codehighlighter1_1466_1571_Closed_Text.style.display='none'; Codehighlighter1_1466_1571_Open_Image.style.display='inline'; Codehighlighter1_1466_1571_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id=Codehighlighter1_1466_1571_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1466_1571_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_1545_1555_Open_Image onclick="this.style.display='none'; Codehighlighter1_1545_1555_Open_Text.style.display='none'; Codehighlighter1_1545_1555_Closed_Image.style.display='inline'; Codehighlighter1_1545_1555_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_1545_1555_Closed_Image onclick="this.style.display='none'; Codehighlighter1_1545_1555_Closed_Text.style.display='none'; Codehighlighter1_1545_1555_Open_Image.style.display='inline'; Codehighlighter1_1545_1555_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.Invoke(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;ShowInfoHandler(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.ShowInfo),&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">object</span><span style="COLOR: #000000">[]&nbsp;</span><span style="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" id=Codehighlighter1_1545_1555_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1545_1555_Open_Text><span style="COLOR: #000000">{&nbsp;strInfo&nbsp;}</span></span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br><img id=Codehighlighter1_1602_1669_Open_Image onclick="this.style.display='none'; Codehighlighter1_1602_1669_Open_Text.style.display='none'; Codehighlighter1_1602_1669_Closed_Image.style.display='inline'; Codehighlighter1_1602_1669_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_1602_1669_Closed_Image onclick="this.style.display='none'; Codehighlighter1_1602_1669_Closed_Text.style.display='none'; Codehighlighter1_1602_1669_Open_Image.style.display='inline'; Codehighlighter1_1602_1669_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id=Codehighlighter1_1602_1669_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1602_1669_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.rtbHistory.AppendText(strInfo);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">#endregion</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img id=Codehighlighter1_1709_2224_Closed_Image onclick="this.style.display='none'; Codehighlighter1_1709_2224_Closed_Text.style.display='none'; Codehighlighter1_1709_2224_Open_Image.style.display='inline'; Codehighlighter1_1709_2224_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif"><img style="DISPLAY: none" id=Codehighlighter1_1709_2224_Open_Image onclick="this.style.display='none'; Codehighlighter1_1709_2224_Open_Text.style.display='none'; Codehighlighter1_1709_2224_Closed_Image.style.display='inline'; Codehighlighter1_1709_2224_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_1709_2224_Closed_Text>监控事件</span><span style="DISPLAY: none" id=Codehighlighter1_1709_2224_Open_Text><span style="COLOR: #0000ff">#region</span><span style="COLOR: #000000">&nbsp;监控事件</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;mWatch_Deleted(</span><span style="COLOR: #0000ff">object</span><span style="COLOR: #000000">&nbsp;sender,&nbsp;FileSystemEventArgs&nbsp;e)<br><img id=Codehighlighter1_1796_1881_Open_Image onclick="this.style.display='none'; Codehighlighter1_1796_1881_Open_Text.style.display='none'; Codehighlighter1_1796_1881_Closed_Image.style.display='inline'; Codehighlighter1_1796_1881_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_1796_1881_Closed_Image onclick="this.style.display='none'; Codehighlighter1_1796_1881_Closed_Text.style.display='none'; Codehighlighter1_1796_1881_Open_Image.style.display='inline'; Codehighlighter1_1796_1881_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id=Codehighlighter1_1796_1881_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1796_1881_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ShowInfo(e.ChangeType.ToString()&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\t</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;e.Name&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\r\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;mWatch_Created(</span><span style="COLOR: #0000ff">object</span><span style="COLOR: #000000">&nbsp;sender,&nbsp;FileSystemEventArgs&nbsp;e)<br><img id=Codehighlighter1_1958_2043_Open_Image onclick="this.style.display='none'; Codehighlighter1_1958_2043_Open_Text.style.display='none'; Codehighlighter1_1958_2043_Closed_Image.style.display='inline'; Codehighlighter1_1958_2043_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_1958_2043_Closed_Image onclick="this.style.display='none'; Codehighlighter1_1958_2043_Closed_Text.style.display='none'; Codehighlighter1_1958_2043_Open_Image.style.display='inline'; Codehighlighter1_1958_2043_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id=Codehighlighter1_1958_2043_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1958_2043_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ShowInfo(e.ChangeType.ToString()&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\t</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;e.Name&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\r\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;mWatch_Changed(</span><span style="COLOR: #0000ff">object</span><span style="COLOR: #000000">&nbsp;sender,&nbsp;FileSystemEventArgs&nbsp;e)<br><img id=Codehighlighter1_2120_2205_Open_Image onclick="this.style.display='none'; Codehighlighter1_2120_2205_Open_Text.style.display='none'; Codehighlighter1_2120_2205_Closed_Image.style.display='inline'; Codehighlighter1_2120_2205_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_2120_2205_Closed_Image onclick="this.style.display='none'; Codehighlighter1_2120_2205_Closed_Text.style.display='none'; Codehighlighter1_2120_2205_Open_Image.style.display='inline'; Codehighlighter1_2120_2205_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id=Codehighlighter1_2120_2205_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_2120_2205_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ShowInfo(e.ChangeType.ToString()&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\t</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;e.Name&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\r\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">#endregion</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span></div>
<br></div>
<img src ="http://www.cppblog.com/AutomateProgram/aggbug/126029.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/AutomateProgram/" target="_blank">漂漂</a> 2010-09-06 17:45 <a href="http://www.cppblog.com/AutomateProgram/archive/2010/09/06/126029.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决C#中LISTVIEW拖动时闪烁问题</title><link>http://www.cppblog.com/AutomateProgram/archive/2010/09/01/125544.html</link><dc:creator>漂漂</dc:creator><author>漂漂</author><pubDate>Wed, 01 Sep 2010 10:15:00 GMT</pubDate><guid>http://www.cppblog.com/AutomateProgram/archive/2010/09/01/125544.html</guid><wfw:comment>http://www.cppblog.com/AutomateProgram/comments/125544.html</wfw:comment><comments>http://www.cppblog.com/AutomateProgram/archive/2010/09/01/125544.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/AutomateProgram/comments/commentRss/125544.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/AutomateProgram/services/trackbacks/125544.html</trackback:ping><description><![CDATA[原文地址：<a href="http://hi.baidu.com/susdisk/blog/item/ee133dcbf19417f553664f46.html">http://hi.baidu.com/susdisk/blog/item/ee133dcbf19417f553664f46.html</a><br>原文地址：<a href="http://blog.csdn.net/hfzsjz/archive/2008/12/15/3521631.aspx">http://blog.csdn.net/hfzsjz/archive/2008/12/15/3521631.aspx</a><br><br>
<p>这个问题网上有成型的解决方法，引起闪烁的问题有两个：</p>
<p>一，是加入删除大量数据引起。</p>
<p>二，是没有开启LISTVIEW的双缓存功能。</p>
<p>我需要用一个TIMER实时更新LISTVIEW，遇到的是第二个问题，重载LISTVIEW，写一个新组件，然后在FORM.DESIGNER文件里将LISTVIEW替换为这个类即可：</p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">&nbsp;class&nbsp;DoubleBufferListView:&nbsp;ListView<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;DoubleBufferListView()<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetStyle(ControlStyles.DoubleBuffer&nbsp;|&nbsp;ControlStyles.OptimizedDoubleBuffer&nbsp;|&nbsp;ControlStyles.AllPaintingInWmPaint,&nbsp;true);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UpdateStyles();&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span></div>
<p><br>另外：加入删除大量数据<br><br>防止闪烁的ListView显示方案</p>
<p>相信做Win Form程序的朋友们一定遇到过在ListView中插入数据时，界面上一直在闪烁，而且速度很慢的情况吧。究其原因，还是在Windows消息机制没有使用好的原因。</p>
<p>本文对于ListView闪烁的原因，进行探究，并对于不同种的情况给出解决方案。</p>
<p>闪烁的原因</p>
<p>ListView闪烁的原因有以下几点或几种情况：<br>1：在数据多次插入间，存在时间间隔。<br>2：使用普通的Items.Add方法插入的数据量过大。<br>3：界面上有多个ListView在进行数据插入。</p>
<p>最根本的原因是因为，每次调用ListView实例进行插入的时候，都需要向系统发送一个窗口消息（相信做C＋＋的朋友应该很清楚），然后窗口接到消息就会刷新对应控件的界面。所以，如果间隔时间长，或插入次数多，一定会闪烁的。<br>&nbsp; 防止闪烁的ListView显示方案 收藏 <br>The resolution of ListView Blink</p>
<p>防止闪烁的ListView显示方案</p>
<p>相信做Win Form程序的朋友们一定遇到过在ListView中插入数据时，界面上一直在闪烁，而且速度很慢的情况吧。究其原因，还是在Windows消息机制没有使用好的原因。</p>
<p>本文对于ListView闪烁的原因，进行探究，并对于不同种的情况给出解决方案。</p>
<p>闪烁的原因</p>
<p>ListView闪烁的原因有以下几点或几种情况：<br>1：在数据多次插入间，存在时间间隔。<br>2：使用普通的Items.Add方法插入的数据量过大。<br>3：界面上有多个ListView在进行数据插入。</p>
<p>最根本的原因是因为，每次调用ListView实例进行插入的时候，都需要向系统发送一个窗口消息（相信做C＋＋的朋友应该很清楚），然后窗口接到消息就会刷新对应控件的界面。所以，如果间隔时间长，或插入次数多，一定会闪烁的。</p>
<p>&nbsp;</p>
<p>解决方案</p>
<p>源码中实例的解决方案：</p>
<p>&nbsp;</p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">ListViewItem&nbsp;lvi;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ListViewItem[]&nbsp;lvitems1&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;ListViewItem[</span><span style="COLOR: #000000">10000</span><span style="COLOR: #000000">];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">10000</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_139_265_Open_Image onclick="this.style.display='none'; Codehighlighter1_139_265_Open_Text.style.display='none'; Codehighlighter1_139_265_Closed_Image.style.display='inline'; Codehighlighter1_139_265_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_139_265_Closed_Image onclick="this.style.display='none'; Codehighlighter1_139_265_Closed_Text.style.display='none'; Codehighlighter1_139_265_Open_Image.style.display='inline'; Codehighlighter1_139_265_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id=Codehighlighter1_139_265_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_139_265_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_193_214_Open_Image onclick="this.style.display='none'; Codehighlighter1_193_214_Open_Text.style.display='none'; Codehighlighter1_193_214_Closed_Image.style.display='inline'; Codehighlighter1_193_214_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_193_214_Closed_Image onclick="this.style.display='none'; Codehighlighter1_193_214_Closed_Text.style.display='none'; Codehighlighter1_193_214_Open_Image.style.display='inline'; Codehighlighter1_193_214_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lvi&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;ListViewItem(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">[]&nbsp;</span><span style="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" id=Codehighlighter1_193_214_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_193_214_Open_Text><span style="COLOR: #000000">{&nbsp;i.ToString(),&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">22</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;}</span></span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lvitems1[i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;lvi;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listViewTest.Items.AddRange(lvitems1);更通用的解决方法：<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;create&nbsp;a&nbsp;temp&nbsp;dataTable&nbsp;to&nbsp;store&nbsp;data</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataTable&nbsp;dt&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;DataTable();<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataRow&nbsp;dr;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dt.Columns.Add(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ID</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">typeof</span><span style="COLOR: #000000">(String));<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dt.Columns.Add(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Name</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">typeof</span><span style="COLOR: #000000">(String));<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dt.Columns.Add(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Class</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">typeof</span><span style="COLOR: #000000">(String));<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dt.Columns.Add(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Lesson</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">typeof</span><span style="COLOR: #000000">(String));<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">foreach</span><span style="COLOR: #000000">(item&nbsp;</span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000">&nbsp;dataSource)<br><img id=Codehighlighter1_694_976_Open_Image onclick="this.style.display='none'; Codehighlighter1_694_976_Open_Text.style.display='none'; Codehighlighter1_694_976_Closed_Image.style.display='inline'; Codehighlighter1_694_976_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_694_976_Closed_Image onclick="this.style.display='none'; Codehighlighter1_694_976_Closed_Text.style.display='none'; Codehighlighter1_694_976_Open_Image.style.display='inline'; Codehighlighter1_694_976_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id=Codehighlighter1_694_976_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_694_976_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dr&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;dt.NewRow();<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dr[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;item.ID;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;ID&nbsp;</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dr[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;item.Name;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Name</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dr[</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;item.Class;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Class</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dr[</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;item.Lesson;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Lesson</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dt.Rows.Add(dr);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;loop&nbsp;the&nbsp;temp&nbsp;table&nbsp;,&nbsp;and&nbsp;insert&nbsp;to&nbsp;ListView</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(iint&nbsp;iSize&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(dt.Rows.Count</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">i)</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">:(dt.Rows.Count</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">i);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ListViewItem&nbsp;lvi;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ListViewItem[]&nbsp;lvitems&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;ListViewItem[iSize];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;j&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;iSize;&nbsp;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_1336_1565_Open_Image onclick="this.style.display='none'; Codehighlighter1_1336_1565_Open_Text.style.display='none'; Codehighlighter1_1336_1565_Closed_Image.style.display='inline'; Codehighlighter1_1336_1565_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_1336_1565_Closed_Image onclick="this.style.display='none'; Codehighlighter1_1336_1565_Closed_Text.style.display='none'; Codehighlighter1_1336_1565_Open_Image.style.display='inline'; Codehighlighter1_1336_1565_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id=Codehighlighter1_1336_1565_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1336_1565_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_1394_1507_Open_Image onclick="this.style.display='none'; Codehighlighter1_1394_1507_Open_Text.style.display='none'; Codehighlighter1_1394_1507_Closed_Image.style.display='inline'; Codehighlighter1_1394_1507_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_1394_1507_Closed_Image onclick="this.style.display='none'; Codehighlighter1_1394_1507_Closed_Text.style.display='none'; Codehighlighter1_1394_1507_Open_Image.style.display='inline'; Codehighlighter1_1394_1507_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lvi&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;ListViewItem(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">[]&nbsp;</span><span style="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" id=Codehighlighter1_1394_1507_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1394_1507_Open_Text><span style="COLOR: #000000">{&nbsp;dt.Rows[i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">j][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">].ToString(),&nbsp;dt.Rows[i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">j][</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">].ToString(),&nbsp;dt.Rows[i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">j][</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">].ToString(),&nbsp;dt.Rows[i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">j][</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">].ToString()&nbsp;}</span></span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lvitems[i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;lvi;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listViewTest.Items.AddRange(lvitems);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;iSize;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span></div>
<p><br>主要思路是，建一个临时的Table，然后，把数据插入到这个临时表中；在处理结束之后，使用Items.AddRange方法把数据分块插入到ListView。</p>
<p><a href="http://blog.csdn.net/hfzsjz/archive/2008/12/15/3521631.aspx"></a>&nbsp;</p>
<img src ="http://www.cppblog.com/AutomateProgram/aggbug/125544.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/AutomateProgram/" target="_blank">漂漂</a> 2010-09-01 18:15 <a href="http://www.cppblog.com/AutomateProgram/archive/2010/09/01/125544.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>事件与委托有别， delegate 与 Delegate 相异</title><link>http://www.cppblog.com/AutomateProgram/archive/2010/08/31/125457.html</link><dc:creator>漂漂</dc:creator><author>漂漂</author><pubDate>Tue, 31 Aug 2010 14:02:00 GMT</pubDate><guid>http://www.cppblog.com/AutomateProgram/archive/2010/08/31/125457.html</guid><wfw:comment>http://www.cppblog.com/AutomateProgram/comments/125457.html</wfw:comment><comments>http://www.cppblog.com/AutomateProgram/archive/2010/08/31/125457.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/AutomateProgram/comments/commentRss/125457.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/AutomateProgram/services/trackbacks/125457.html</trackback:ping><description><![CDATA[<span class=Apple-style-span style="WORD-SPACING: 0px; FONT: medium Simsun; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class=Apple-style-span style="FONT-SIZE: 13px; LINE-HEIGHT: 19px; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif">&nbsp;<br>原文地址：<a href="http://www.cnblogs.com/ibmfm/archive/2009/01/10/1373354.html">http://www.cnblogs.com/ibmfm/archive/2009/01/10/1373354.html</a><br>我们都知道事件是特殊的委托，特殊在哪儿？
<div>&nbsp;&nbsp; &nbsp;我只发现了一点，就是委托类型在初始化时可以用&#8220;=&#8221;，而事件只能是&#8220;+="。这使得事件处理程序只能一个个的往上挂，然后用&#8221;-=&#8220;一个个的注销，从而避免了委托的&#8221;=&#8220;一下子只赋为一个方法或赋为 null 而遭清空。这有用吗？有用。比如你开发组件的时候，某个业务对象的事件被触发，你想先在组件内部处理一下，处理完了再往外传，让组件调用方处理，这时你就得用 event 声明；如果只是声明为 delegate，则可能组件调用方一个&#8220;=&#8221;赋值，你的方法就没机会执行了。由此可见，<span style="COLOR: red; LINE-HEIGHT: 19px">如果可能会多次委托处理，应该声明为 event；只处理一次，delegate 就够了</span>。</div>
<div>&nbsp;&nbsp; &nbsp;实际上 delegate 也可以用&#8220;+=&#8221;赋值，此时效果跟 event 一样。但谁敢保证调用方不会来个&#8220;=&#8221;呢！</div>
<div>&nbsp;&nbsp; &nbsp;delegate 之所以也能&#8220;+=&#8221;赋值，是因为用 delegate 声明的委托实际是 System.MulticastDelegate 类型，叫多路广播委托，天生拥有多路广播的能力。</div>
<div>&nbsp;</div>
<div>&nbsp;&nbsp; &nbsp;注意，delegate 开头是小写的 d，如果换成大写开头的 Delegate，那差别可就大了，简直是<span style="COLOR: red; LINE-HEIGHT: 19px">孙子和爷爷的区别</span>。为什么说是孙子和爷爷呢？因为 delegate 仅仅是 C# 的关键字，表示一个继承自 System.MulticastDelegate 的具体委托类，而 Delegate 却是 &nbsp;System.MulticastDelegate 的父类，这还不是孙子和爷爷吗。另外，Delegate 和 &nbsp;System.MulticastDelegate 都是抽象类，只有编译器才可以从此类派生。也就是说，除了用 delegate 这种形式，我们不能显式地从这两个类派生。</div>
<div>&nbsp;&nbsp; &nbsp;关于 delegate 和 Delegate，我以前一直以为是一样的，就像 string 之于 String，bool 之于 Boolean，仅仅是个方便书写的别名。这次发现它们的区别，是在看王翔的新书《设计模式——基于C#的工程化实现》时。王翔说&#8220;delegate 声明的 Delegate 类型其实本身继承自 &nbsp;System.MulticastDelegate &#8221;，我认为他说反了，寻思着给人家发个邮件指出一个 bug，没想到是我自己没弄清楚。</div>
<div>&nbsp;</div>
<div>&nbsp;&nbsp; &nbsp;最后感叹一下，王翔跟我同年同级，他海大物理系毕业，也算半路出家。同样毕业七年，人家都出书了，我还得努力啊。<br><br>ps：<a class=postTitle2 id=ctl04_TitleUrl href="http://www.cnblogs.com/JimmyZhang/archive/2007/09/23/903360.html"><font color=#399ab2>C# 中的委托和事件</font></a><br>地址：<a href="http://www.cnblogs.com/JimmyZhang/archive/2007/09/23/903360.html">http://www.cnblogs.com/JimmyZhang/archive/2007/09/23/903360.html</a><br></div>
</span></span>
<img src ="http://www.cppblog.com/AutomateProgram/aggbug/125457.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/AutomateProgram/" target="_blank">漂漂</a> 2010-08-31 22:02 <a href="http://www.cppblog.com/AutomateProgram/archive/2010/08/31/125457.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C#中跨线程操作控件 --- InvokeRequired 属性 与Invoke方法</title><link>http://www.cppblog.com/AutomateProgram/archive/2010/08/31/125451.html</link><dc:creator>漂漂</dc:creator><author>漂漂</author><pubDate>Tue, 31 Aug 2010 13:24:00 GMT</pubDate><guid>http://www.cppblog.com/AutomateProgram/archive/2010/08/31/125451.html</guid><wfw:comment>http://www.cppblog.com/AutomateProgram/comments/125451.html</wfw:comment><comments>http://www.cppblog.com/AutomateProgram/archive/2010/08/31/125451.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/AutomateProgram/comments/commentRss/125451.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/AutomateProgram/services/trackbacks/125451.html</trackback:ping><description><![CDATA[<p style="COLOR: #000000">原文地址：<a href="http://hi.baidu.com/%D0%A1%B0%D7%C1%B3%B5%C4%D2%B6%D7%D3/blog/item/a69dc6d2c7b3190b3af3cf8f.html">http://hi.baidu.com/%D0%A1%B0%D7%C1%B3%B5%C4%D2%B6%D7%D3/blog/item/a69dc6d2c7b3190b3af3cf8f.html</a><br></p>
<p style="COLOR: #000000">在设计中为了让界面与逻辑分离，我的做法是使用事件，界面只要响应事件来处理界面的显示就行了。而事件在逻辑处理中可能由不同的线程引发，这些事件的响应方法在修改界面中的控件内容时便会引发一个异常。</p>
<p style="COLOR: #000000">这时就用到了Control.InvokeRequired 属性 与Invoke方法。</p>
<p style="COLOR: #000000">MSDN中说：<br>获取一个值，该值指示调用方在对控件进行方法调用时是否必须调用 Invoke 方法，因为调用方位于创建控件所在的线程以外的线程中。 <br>如果控件的 Handle 是在与调用线程不同的线程上创建的（说明您必须通过 Invoke 方法对控件进行调用），则为 true；否则为 false。<br>Windows 窗体中的控件被绑定到特定的线程，不具备线程安全性 。因此，如果从另一个线程调用控件的方法，那么必须使用控件的一个 Invoke 方法来将调用封送到适当的线程。该属性可用于确定是否必须调用 Invoke 方法，当不知道什么线程拥有控件时这很有用。 </p>
<p style="COLOR: #000000">下面来说下这个的用法（我的一般做法）：<br>首先定义一个委托，与这个事件处理函数的签名一样委托，当然直接使用该事件的委托也是可以的，如：</p>
<p style="COLOR: #000000">&nbsp;</p>
<div style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>private&nbsp;&nbsp;&nbsp;delegate&nbsp;&nbsp;&nbsp;void&nbsp;InvokeCallback(&nbsp;string&nbsp;msg);&nbsp;</div>
<p style="COLOR: #000000"><br>然后就是判断这个属性的值来决定是否要调用Invoke函数：</p>
<p style="COLOR: #000000">&nbsp;</p>
<div style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>void&nbsp;m_comm_MessageEvent(&nbsp;string&nbsp;msg)<br><img id=Codehighlighter1_44_298_Open_Image onclick="this.style.display='none'; Codehighlighter1_44_298_Open_Text.style.display='none'; Codehighlighter1_44_298_Closed_Image.style.display='inline'; Codehighlighter1_44_298_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_44_298_Closed_Image onclick="this.style.display='none'; Codehighlighter1_44_298_Closed_Text.style.display='none'; Codehighlighter1_44_298_Open_Image.style.display='inline'; Codehighlighter1_44_298_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.cppblog.com/Images/dot.gif">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(txtMessage.InvokeRequired)<br><img id=Codehighlighter1_89_237_Open_Image onclick="this.style.display='none'; Codehighlighter1_89_237_Open_Text.style.display='none'; Codehighlighter1_89_237_Closed_Image.style.display='inline'; Codehighlighter1_89_237_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_89_237_Closed_Image onclick="this.style.display='none'; Codehighlighter1_89_237_Closed_Text.style.display='none'; Codehighlighter1_89_237_Open_Image.style.display='inline'; Codehighlighter1_89_237_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.cppblog.com/Images/dot.gif">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InvokeCallbackmsgCallback&nbsp;=&nbsp;&nbsp;&nbsp;new&nbsp;InvokeCallback(m_comm_MessageEvent);<br><img id=Codehighlighter1_222_228_Open_Image onclick="this.style.display='none'; Codehighlighter1_222_228_Open_Text.style.display='none'; Codehighlighter1_222_228_Closed_Image.style.display='inline'; Codehighlighter1_222_228_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_222_228_Closed_Image onclick="this.style.display='none'; Codehighlighter1_222_228_Closed_Text.style.display='none'; Codehighlighter1_222_228_Open_Image.style.display='inline'; Codehighlighter1_222_228_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtMessage.Invoke(msgCallback,&nbsp;new&nbsp;&nbsp;&nbsp;object&nbsp;[]&nbsp;&nbsp;&nbsp;<img src="http://www.cppblog.com/Images/dot.gif">{&nbsp;msg&nbsp;}&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;<br><img id=Codehighlighter1_258_292_Open_Image onclick="this.style.display='none'; Codehighlighter1_258_292_Open_Text.style.display='none'; Codehighlighter1_258_292_Closed_Image.style.display='inline'; Codehighlighter1_258_292_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_258_292_Closed_Image onclick="this.style.display='none'; Codehighlighter1_258_292_Closed_Text.style.display='none'; Codehighlighter1_258_292_Open_Image.style.display='inline'; Codehighlighter1_258_292_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.cppblog.com/Images/dot.gif">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtMessage.Text&nbsp;=&nbsp;msg;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;}&nbsp;</div>
<p style="COLOR: #000000"><br>说明：这个函数就是事件处理函数，txtMessage是一个文本框。<br>这样就做到了窗体中控件的线程安全性。</p>
<p style="COLOR: #000000">------------------</p>
<p style="COLOR: #000000">InvokeRequired 当前线程不是创建控件的线程时为true<br>比如你可以自己开一个Thread，或使用Timer的事件来访问窗体上的控件的时候，在线程中窗体的这个属性就是True的。</p>
<p style="COLOR: #000000">简单的说，如果有两个线程，Thread A和Thread B，并且有一个Control c，是在Thread A里面new的。<br>那么在Thread A里面运行的任何方法调用c.InvokeRequired都会返回false。<br>相反，如果在Thread B里面运行的任何方法调用c.InvokeRequired都会返回true。<br>是否是UI线程与结果无关。（通常Control所在的线程是UI线程，但是可以有例外）</p>
<p style="COLOR: #000000">也可以认为，在new Control()的时候，control用一个变量记录下了当前线程，在调用InvokeRequired时，返回当前线程是否不等于new的时候记录下来的那个线程。</p>
<p style="COLOR: #000000">--------------------</p>
<p style="COLOR: #000000">我理解：如果InvokeRequired==true表示其它线程需要访问控件，那么调用invoke来转给控件owner处理。<br><br>ps：<a id=ctl04_TitleUrl href="http://www.cnblogs.com/xugang/archive/2008/04/06/1138856.html"><u><font color=#800080>C#多线程学习</font></u></a><br><a href="http://www.cnblogs.com/xugang/archive/2008/04/06/1138856.html">http://www.cnblogs.com/xugang/archive/2008/04/06/1138856.html</a><br><br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Collections.Generic;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.ComponentModel;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Data;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Drawing;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Text;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Windows.Forms;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Threading;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;WinThreadNew<br><img id=Codehighlighter1_213_1323_Open_Image onclick="this.style.display='none'; Codehighlighter1_213_1323_Open_Text.style.display='none'; Codehighlighter1_213_1323_Closed_Image.style.display='inline'; Codehighlighter1_213_1323_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_213_1323_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_213_1323_Closed_Text.style.display='none'; Codehighlighter1_213_1323_Open_Image.style.display='inline'; Codehighlighter1_213_1323_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_213_1323_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_213_1323_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;partial&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;WinThreadNew&nbsp;:&nbsp;Form<br><img id=Codehighlighter1_264_1321_Open_Image onclick="this.style.display='none'; Codehighlighter1_264_1321_Open_Text.style.display='none'; Codehighlighter1_264_1321_Closed_Image.style.display='inline'; Codehighlighter1_264_1321_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_264_1321_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_264_1321_Closed_Text.style.display='none'; Codehighlighter1_264_1321_Open_Image.style.display='inline'; Codehighlighter1_264_1321_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_264_1321_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_264_1321_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;pro&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread&nbsp;backWork&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;WinThreadNew()<br><img id=Codehighlighter1_357_402_Open_Image onclick="this.style.display='none'; Codehighlighter1_357_402_Open_Text.style.display='none'; Codehighlighter1_357_402_Closed_Image.style.display='inline'; Codehighlighter1_357_402_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_357_402_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_357_402_Closed_Text.style.display='none'; Codehighlighter1_357_402_Open_Image.style.display='inline'; Codehighlighter1_357_402_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_357_402_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_357_402_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InitializeComponent();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;btnStart_Click(</span><span style="COLOR: #0000ff">object</span><span style="COLOR: #000000">&nbsp;sender,&nbsp;EventArgs&nbsp;e)<br><img id=Codehighlighter1_477_577_Open_Image onclick="this.style.display='none'; Codehighlighter1_477_577_Open_Text.style.display='none'; Codehighlighter1_477_577_Closed_Image.style.display='inline'; Codehighlighter1_477_577_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_477_577_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_477_577_Closed_Text.style.display='none'; Codehighlighter1_477_577_Open_Image.style.display='inline'; Codehighlighter1_477_577_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_477_577_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_477_577_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;backWork&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Thread(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;ThreadStart(doWork));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;backWork.Start();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">delegate</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;DelegateUpdateUIPro();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;doWork()<br><img id=Codehighlighter1_670_853_Open_Image onclick="this.style.display='none'; Codehighlighter1_670_853_Open_Text.style.display='none'; Codehighlighter1_670_853_Closed_Image.style.display='inline'; Codehighlighter1_670_853_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_670_853_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_670_853_Closed_Text.style.display='none'; Codehighlighter1_670_853_Open_Image.style.display='inline'; Codehighlighter1_670_853_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_670_853_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_670_853_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">&nbsp;)<br><img id=Codehighlighter1_727_830_Open_Image onclick="this.style.display='none'; Codehighlighter1_727_830_Open_Text.style.display='none'; Codehighlighter1_727_830_Closed_Image.style.display='inline'; Codehighlighter1_727_830_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_727_830_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_727_830_Closed_Text.style.display='none'; Codehighlighter1_727_830_Open_Image.style.display='inline'; Codehighlighter1_727_830_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_727_830_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_727_830_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pro</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UpdateUIPro();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.Sleep(</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;UpdateUIPro()<br><img id=Codehighlighter1_899_1149_Open_Image onclick="this.style.display='none'; Codehighlighter1_899_1149_Open_Text.style.display='none'; Codehighlighter1_899_1149_Closed_Image.style.display='inline'; Codehighlighter1_899_1149_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_899_1149_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_899_1149_Closed_Text.style.display='none'; Codehighlighter1_899_1149_Open_Image.style.display='inline'; Codehighlighter1_899_1149_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_899_1149_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_899_1149_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.InvokeRequired)<br><img id=Codehighlighter1_950_1036_Open_Image onclick="this.style.display='none'; Codehighlighter1_950_1036_Open_Text.style.display='none'; Codehighlighter1_950_1036_Closed_Image.style.display='inline'; Codehighlighter1_950_1036_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_950_1036_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_950_1036_Closed_Text.style.display='none'; Codehighlighter1_950_1036_Open_Image.style.display='inline'; Codehighlighter1_950_1036_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_950_1036_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_950_1036_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.BeginInvoke(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;DelegateUpdateUIPro(UpdateUIPro));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br><img id=Codehighlighter1_1068_1139_Open_Image onclick="this.style.display='none'; Codehighlighter1_1068_1139_Open_Text.style.display='none'; Codehighlighter1_1068_1139_Closed_Image.style.display='inline'; Codehighlighter1_1068_1139_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1068_1139_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1068_1139_Closed_Text.style.display='none'; Codehighlighter1_1068_1139_Open_Image.style.display='inline'; Codehighlighter1_1068_1139_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1068_1139_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1068_1139_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.lblPro.Text&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;pro.ToString()&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Form1_FormClosed(</span><span style="COLOR: #0000ff">object</span><span style="COLOR: #000000">&nbsp;sender,&nbsp;FormClosedEventArgs&nbsp;e)<br><img id=Codehighlighter1_1236_1315_Open_Image onclick="this.style.display='none'; Codehighlighter1_1236_1315_Open_Text.style.display='none'; Codehighlighter1_1236_1315_Closed_Image.style.display='inline'; Codehighlighter1_1236_1315_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1236_1315_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1236_1315_Closed_Text.style.display='none'; Codehighlighter1_1236_1315_Open_Image.style.display='inline'; Codehighlighter1_1236_1315_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1236_1315_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1236_1315_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.backWork.Abort();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.backWork.Join();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<img src ="http://www.cppblog.com/AutomateProgram/aggbug/125451.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/AutomateProgram/" target="_blank">漂漂</a> 2010-08-31 21:24 <a href="http://www.cppblog.com/AutomateProgram/archive/2010/08/31/125451.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c#控件的使用：ContextMenuStrip </title><link>http://www.cppblog.com/AutomateProgram/archive/2010/08/29/125216.html</link><dc:creator>漂漂</dc:creator><author>漂漂</author><pubDate>Sun, 29 Aug 2010 14:55:00 GMT</pubDate><guid>http://www.cppblog.com/AutomateProgram/archive/2010/08/29/125216.html</guid><wfw:comment>http://www.cppblog.com/AutomateProgram/comments/125216.html</wfw:comment><comments>http://www.cppblog.com/AutomateProgram/archive/2010/08/29/125216.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/AutomateProgram/comments/commentRss/125216.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/AutomateProgram/services/trackbacks/125216.html</trackback:ping><description><![CDATA[<p>原文地址：<a href="http://www.huanghengxu.com/Html/Article/204.htm">http://www.huanghengxu.com/Html/Article/204.htm</a></p>
ContextMenuStrip&nbsp;是右键菜单对象 <br>ContextMenuStrip&nbsp;的使用 <br>1.在&nbsp;Form&nbsp;中添加&nbsp;ContextMenuStrip&nbsp;控件 <br><br>2.向&nbsp;ContextMenuStrip&nbsp;对象中添加&nbsp;MenuItem&nbsp;对象，MenuItem&nbsp;就是菜单中的元素 <br><br>3.每一个可以绑定右键菜单对象都会有一个&nbsp;ContextMenuStrip&nbsp;属性，把这个&nbsp;ContextMenuStrip&nbsp;对象设置给目标对象的&nbsp;ContextMenuStrip&nbsp;属性，这就完成了。
<img src ="http://www.cppblog.com/AutomateProgram/aggbug/125216.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/AutomateProgram/" target="_blank">漂漂</a> 2010-08-29 22:55 <a href="http://www.cppblog.com/AutomateProgram/archive/2010/08/29/125216.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C#里判断窗体是否已经加载(转)</title><link>http://www.cppblog.com/AutomateProgram/archive/2010/08/29/125213.html</link><dc:creator>漂漂</dc:creator><author>漂漂</author><pubDate>Sun, 29 Aug 2010 14:46:00 GMT</pubDate><guid>http://www.cppblog.com/AutomateProgram/archive/2010/08/29/125213.html</guid><wfw:comment>http://www.cppblog.com/AutomateProgram/comments/125213.html</wfw:comment><comments>http://www.cppblog.com/AutomateProgram/archive/2010/08/29/125213.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/AutomateProgram/comments/commentRss/125213.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/AutomateProgram/services/trackbacks/125213.html</trackback:ping><description><![CDATA[原文地址：<a href="http://www.84ren.com/read.php?tid-31409.html">http://www.84ren.com/read.php?tid-31409.html</a><br>大家好 我是GIS理想 当我们做C#开发的时候 也就是说只要是应用程序开发的时候 有一个问题是要经常遇到的 就是当我们点击打开新窗口的问题 如何判断窗口已经打开了 因为如果不做判断的话 明显会出现问题 ：每点击一次 就会加载一个相同的窗口 这个是不对的 <br><br>一般我们打开一个新窗口是这样的：<br><br>Private void button_Click(object sender，EventArgs e)<br><br>{<br><br>Frm frm=new Frm();<br><br>Frm.show();<br><br>}<br>这个是经常要用到的 呵呵 尤其是我这样的新手 。。。。。。<br><br>很明显 这样每点击一次 都会出来一个新的Frm窗体的 那么怎么判断当前的窗体已经加载呢 <br><br>方法一 用window api（没用这里过 不敢妄言）<br><br>方法二 先实例化一个窗体，然后在点击事件里让它显示 如下：<br><br>Frm frm= new Frm();<br>&nbsp; &nbsp; &nbsp; &nbsp; private void pictureBox2_Click(object sender, EventArgs e)<br>&nbsp; &nbsp; &nbsp; &nbsp; {<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (!frm.Created)<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; f = new Frm();<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; f.Show();<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br><br>很明显 这个貌似能实现只出来一次 但是随之而来的问题是 事先就实例化了这个窗体 这在代码编写里是不好的习惯<br><br>要是有很多的窗体的话 加载程序的时候就很占系统资源了 所以这样的写法也不可取 <br><br>方法三 声明一个窗体变量 然后动态的创建并显示 <br><br>其实这个方法来自于第二个方法的思路 认真分析一下第二个方法可以看到 之所以不可取是因为在声明的时候直接实例化了 那么我们不实例化它 只声明一个窗体变量 不就行了么？<br><br>是的 例子代码如下：<br><br>//这句放在窗体的初始化的地方 不是点击事件里最佳addPlaceMark是窗体的name<br><br>private addPlaceMark addplacemark;<br><br>//下面的放在弹出窗体的点击事件里即可<br><br>if (addplacemark == null || addplacemark.IsDisposed)<br><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; addplacemark = new addPlaceMark();<br><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; addplacemark.Show();<br><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br><br><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; addplacemark.WindowState = FormWindowState.Normal;<br><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; addplacemark.Activate();<br><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; addplacemark.Show();<br><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br><br>这样就可以了 效果很好 呵呵 <br><br>好了 总结完毕 搁笔收工 <br><br><!--google ad--><br><br>ps：<br>应用程序启动与关闭事件 Form 和 Control 类和应用程序启动与关闭有关的时间。<br>&nbsp;&nbsp;&nbsp;
<p>&nbsp;&nbsp; 当 Windows Form 应用程序启动时，会以下列顺序引发主要表单的启动事件：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Windows.Forms.Control.HandleCreated<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Windows.Forms.Control.BindingContextChanged<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Windows.Forms.Form.Load<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Windows.Forms.Control.VisibleChanged<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Windows.Forms.Form.Activated<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Windows.Forms.Form.Shown</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 当应用程序关闭时，会以下列顺序引发主要表单的关闭事件：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Windows.Forms.Form.Closing<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Windows.Forms.Form.FormClosing<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Windows.Forms.Form.Closed<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Windows.Forms.Form.FormClosed<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Windows.Forms.Form.Deactivate</p>
<img src ="http://www.cppblog.com/AutomateProgram/aggbug/125213.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/AutomateProgram/" target="_blank">漂漂</a> 2010-08-29 22:46 <a href="http://www.cppblog.com/AutomateProgram/archive/2010/08/29/125213.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C#-基础控件属性</title><link>http://www.cppblog.com/AutomateProgram/archive/2010/08/29/125212.html</link><dc:creator>漂漂</dc:creator><author>漂漂</author><pubDate>Sun, 29 Aug 2010 14:29:00 GMT</pubDate><guid>http://www.cppblog.com/AutomateProgram/archive/2010/08/29/125212.html</guid><wfw:comment>http://www.cppblog.com/AutomateProgram/comments/125212.html</wfw:comment><comments>http://www.cppblog.com/AutomateProgram/archive/2010/08/29/125212.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/AutomateProgram/comments/commentRss/125212.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/AutomateProgram/services/trackbacks/125212.html</trackback:ping><description><![CDATA[&nbsp;
<p align=left><span>C#-</span><span>基础控件属性</span></p>
<p align=left><span>2009-08-12 11:26</span></p>
<table cellPadding=0 width="100%" border=0>
    <tbody>
        <tr>
            <td>
            <p align=left><span>Control</span><span>类中定义的基础控件属如下（注意 属性名称并不完全一致）：<span> </span></span></p>
            <p align=left><span>1.AllowDrop</span><span>属性：以确定控件是否接受用户的拖动。如果允许其属性值为<span>true</span>，否我<span>false</span>（默认值）。对于<span> RichTextBox</span>控件，本属性中是为<span>false</span>。</span></p>
            <p align=left><span>2.Anchor</span><span>属性：获取或设置控件是男个边缘停靠在容器的边缘。本属性的值为<span>AnchorStyles</span>枚举值之一。</span></p>
            <p align=left><span>3.BackColor</span><span>属性：以获取或设置本控件的背景颜色。本属性为环境属性，因此中是返回非空值。</span></p>
            <p align=left><span>4.BackgroundImage</span><span>属性：以获取或设置控件中显示的背景图片。</span></p>
            <p align=left><span>5.BindingContext</span><span>属性：以获取或设置对象的<span>BindingContext</span>。控件<span>BindingContext</span>对象用于为其中包含的所有数据绑定控件返回一个<span>BindingManagerBese</span>对象。<span>BindingManagerBase</span>对象使绑定到同一数据源的所有控件保持同步。例如：设置该对象<span>Position</span>属性，可以指定所有数据绑定控件指向的底层类表现。（不懂 用到再说，宽宽心里方不下啊）。</span></p>
            <p align=left><span>6.Bottom</span><span>属性：以获取本控件下边缘以容器客户区上边缘之间的距离。本属性的值等于<span>Top</span>属性与<span>Height</span>属性值只和。</span></p>
            <p align=left><span>7.Bounds</span><span>属性：以获取或设置本控件的边界矩形。</span></p>
            <p align=left><span>8.CanFocus</span><span>属性：以确定控件是否能接收焦点。如能，其值为<span>true</span>，否则为<span>false</span>。要使控件能接收输入焦点，控件必须具有句柄，并且<span>Visible</span>和<span>Enabled</span>属性必须为<span>true</span>。</span></p>
            <p align=left><span>9.CanSelect</span><span>属性：以确定本控件是否可被选择。如可以其值为<span>true</span>，否则为<span>false</span>。如果控件的<span>ControlStyles.Selectable</span>被设置为<span>true</span>，并且它的容器控件和所有的父控件都可见并且被启用，这本属性将返回<span>true</span>。下面给出的<span>CanSelect</span>属性为<span>false</span>的<span>windows</span>窗体控件：<span>Panel</span>、<span>GroupBox</span>、<span>PictureBox</span>、<span>ProgressBar</span>、<span>Splitter</span>、<span>Label</span>、<span>LinkLabel</span>（当控件不存在连接时）。需要注意的是，派生自这些控件的控件也不能被选择。</span></p>
            <p align=left><span>10.Capture</span><span>属性：以确定控件是否被鼠标捕获。如是值为<span>true</span>，否值为<span>false</span>（默认）。如<span>true</span>，它将接受鼠标的输入，而无论光标是否处于它的边界内。</span></p>
            <p align=left><span>11.CausesValidation</span><span>属性：以确认进入控件是否会导致所有需要校验的控件被校验。如能值为<span>true</span>否为<span>false</span>（默认值）。对于<span>&#8220;</span>帮助<span>&#8221;</span>按钮等控件，一般都将本属性设置为<span>false</span>。</span></p>
            <p align=left><span>12.ClientRectangle</span><span>属性：以获取代表控件客户区的矩形。在使用<span>.NET</span>框架工具绘制控件表面时，需要本属性以确认绘制区域。</span></p>
            <p align=left><span>13.ClientSize</span><span>属性：以获取客户区的宽度和高度。</span></p>
            <p align=left><span>14.CompanyName</span><span>属性：以获取包含控件应用程序的创建者（公司）名。</span></p>
            <p align=left><span>15.ContainsFocus</span><span>属性：以确定控件或其子控件当前是否具有焦点。</span></p>
            <p align=left><span>16.ContextMenu</span><span>属性：以获取或设置与本控件相关的快捷键。</span></p>
            <p align=left><span>17.Controls</span><span>属性：以获取或设置控件中包含的控件集合。</span></p>
            <p align=left><span>18.Created</span><span>属性：确定控件是否已被创建。是为<span>true</span>，否为<span>false</span>。</span></p>
            <p align=left><span>19.CreateParams</span><span>属性：以获取创建本控件时使用的参数。本属性的值为控件句柄被创建时包含必须参数的<span>CreateParams</span>对象。当在派生类中重载<span>CreateParams</span>时，以确保通过创建基类的<span>CreateParams</span>实例来扩展<span>CreateParams</span>对象<span>——</span>添加或修改属性值。</span></p>
            <p align=left><span>20.Cursor</span><span>属性：以获取或设置当用户将鼠标移动到控件上时鼠标的形状。<span> </span></span></p>
            <p align=left><span>21.DataBindings</span><span>属性：以获取控件的数据绑定。</span></p>
            <p align=left><span>22.DefaultBackColor</span><span>属性：以获取控件默认的背景色。</span></p>
            <p align=left><span>23.DefaultFonts</span><span>属性：获取控件的默认字体。</span></p>
            <p align=left><span>24.DefaultForeColor</span><span>属性：获取控件的默认前景色。</span></p>
            <p align=left><span>25.DefaultImeMode</span><span>属性：获取本控件支持的默认输入法编辑器。</span></p>
            <p align=left><span>26.DefaultSize</span><span>属性：获取控件默认尺寸。</span></p>
            <p align=left><span>27.Disposing</span><span>属性：以确定控件是否处于清除进程。是为<span>true</span>，否为<span>false</span>。在控件被清除后，他就不能作为有效的<span>windows</span>控件引用。虽然控件实例已被清除，它还将被继续存留于内存中，直到冗码收集器将其删除。</span></p>
            <p align=left><span>28.Dock</span><span>属性：获取或设置控件停靠的父容器边界。</span></p>
            <p align=left><span>29,Enabled</span><span>属性：以确定控件是否被启用。是<span>——true</span>，否<span>——false</span>。</span></p>
            <p align=left><span>30.Focused</span><span>属性：确定控件是否具有输入焦点。是<span>——true</span>，否<span>——false</span>。</span></p>
            <p align=left><span>31.Font</span><span>属性：获取或设置控件的当前字体。</span></p>
            <p align=left><span>32.FontHeight</span><span>属性：获取或设置控件<span>Font</span>属性的高度（像素高度）。</span></p>
            <p align=left><span>33.ForeColor</span><span>属性：获取或设置控件的前景色。</span></p>
            <p align=left><span>34.Handle</span><span>属性：获取绑定到控件的窗口句柄。</span></p>
            <p align=left><span>35.HasChildren</span><span>属性：确定控件中是否包含子控件。是<span>——true</span>，否<span>——false</span>。如果控件集合属性大于<span>0</span>，则<span>HasChildren</span>返回<span>true</span>。</span></p>
            <p align=left><span>36.Height</span><span>属性：获取本控件的高度。</span></p>
            <p align=left><span>37.ImeMode</span><span>属性：获取或设置本控件支持的输入方法编辑器。</span></p>
            <p align=left><span>38.InvokeRequired</span><span>属性：确定调用本控件的方法时，是否需要激活调用者。如果控件句柄与方法调用不在同一线程，则标志应通过激活方法来调用其他方法，此时本属性值为<span>true</span>。</span></p>
            <p align=left><span>39.IsDisposed</span><span>属性：确定控件是否已被清除。是<span>——true</span>，否<span>——false</span>。</span></p>
            <p align=left><span>40.IsHandleCreated</span><span>属性：确定控件是否有与之相关句柄。是<span>——true</span>，否<span>——false</span>。</span></p>
            <p align=left><span>41.Left</span><span>属性：获取本控件左边界<span>x</span>坐标。</span></p>
            <p align=left><span>42.Location</span><span>属性：获取本控件的左上角。</span></p>
            <p align=left><span>43.ModifierKeys</span><span>属性：确定<span>Shift</span>、<span>Ctrl</span>、<span>Alt</span>修饰符当前的状态。</span></p>
            <p align=left><span>44.MouseButtons</span><span>属性：确定鼠标键当前状态。</span></p>
            <p align=left><span>45.MousePosition</span><span>属性：获取鼠标指针当前位置（屏幕坐标）。</span></p>
            <p align=left><span>46.Name</span><span>属性：获取或设置控件的名称。默认为空。在运行时，可使用<span>Name</span>属性引用对象。</span></p>
            <p align=left><span>47.Parent</span><span>属性：获取或设置本控件的父对象。</span></p>
            <p align=left><span>48.ProductName</span><span>属性：获取包含控件应用程序的产品名。</span></p>
            <p align=left><span>49.ProductVersion</span><span>属性：获取包含控件应用程序版本。</span></p>
            <p align=left><span>50.RecreatingHandle</span><span>属性：确定控件是否正字重新创建它的句柄。是<span>——true</span>，否<span>——false</span>。</span></p>
            <p align=left><span>51.Region</span><span>属性：获取或设置与本控件相关的区域。本属性定义了控件的轮廓和边界。</span></p>
            <p align=left><span>52.ResizeRedraw</span><span>属性：确定控件是否应在重设尺寸是被重新绘制。是<span>——true</span>，否<span>——false</span>。</span></p>
            <p align=left><span>53.Right</span><span>属性：获取控件右边界与其容器左边界之间的距离。</span></p>
            <p align=left><span>54.RightToLeft</span><span>属性：获取或设置控件元素的对齐方式是否能被颠倒，从而支持使用从右到左字体的地区。</span></p>
            <p align=left><span>55.ShowFocusCues</span><span>属性：确定用户界面是否处于显示或隐藏焦点矩形的状态。是<span>——true</span>，否<span>——false</span>。</span></p>
            <p align=left><span>56.ShowKeyboardCues</span><span>属性：确定用户界面是否处于显示或隐藏键盘加速键的状态。是<span>——true</span>，否<span>——false</span>。</span></p>
            <p align=left><span>57.Size</span><span>属性：获取控件的高度和宽度。</span></p>
            <p align=left><span>58.TabIndex</span><span>属性：获取本控件在容器中的<span>Tab</span>键顺序。</span></p>
            <p align=left><span>59.TabStop</span><span>属性：确定是否能通过<span>Tab</span>键使本控件获取焦点。是<span>——true</span>，否<span>——false</span>。</span></p>
            <p align=left><span>60.Tag</span><span>属性：获取或设置包含与控件相关的数据的对象。默认为空引用。可将任意派生子<span>Object</span>的对象赋予本属性。如果通过<span>windows</span>窗体设计器设置本属性，则只能为其赋予文本。</span></p>
            <p align=left><span>61.Text</span><span>属性：获取或设置与控件相关的文本。</span></p>
            <p align=left><span>62.Top</span><span>属性：获取控件的顶坐标。</span></p>
            <p align=left><span>63.TopLevelControl</span><span>属性：获取包含当前控件顶层的控件。</span></p>
            <p align=left><span>64.Viseble</span><span>属性：确定控件是否可见。是<span>——true</span>，否<span>——false</span>。</span></p>
            <p align=left><span>65.Width</span><span>属性：获取本控件的宽度。</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<img src ="http://www.cppblog.com/AutomateProgram/aggbug/125212.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/AutomateProgram/" target="_blank">漂漂</a> 2010-08-29 22:29 <a href="http://www.cppblog.com/AutomateProgram/archive/2010/08/29/125212.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c#中调用cmd命令执行批处理文件</title><link>http://www.cppblog.com/AutomateProgram/archive/2010/08/29/125136.html</link><dc:creator>漂漂</dc:creator><author>漂漂</author><pubDate>Sun, 29 Aug 2010 03:03:00 GMT</pubDate><guid>http://www.cppblog.com/AutomateProgram/archive/2010/08/29/125136.html</guid><wfw:comment>http://www.cppblog.com/AutomateProgram/comments/125136.html</wfw:comment><comments>http://www.cppblog.com/AutomateProgram/archive/2010/08/29/125136.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/AutomateProgram/comments/commentRss/125136.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/AutomateProgram/services/trackbacks/125136.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Dex2Jar(</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;dexPath)<br><img id=Codehighlighter1_59_1238_Open_Image onclick="this.style.display='none'; Codehighlighter1_59_1238_Open_Text.style.display='none'; Codehighlighter1_59_1238_Closed_Image.style.display='inline'; Codehighlighter1_59_1238_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_59_1238_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_59_1238_Closed_Text.style.display='none'; Codehighlighter1_59_1238_Open_Image.style.display='inline'; Codehighlighter1_59_1238_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_59_1238_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_59_1238_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Process&nbsp;p&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Process();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.StartInfo.FileName&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">cmd.exe&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.StartInfo.UseShellExecute&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.StartInfo.RedirectStandardInput&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.StartInfo.RedirectStandardOutput&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.StartInfo.RedirectStandardError&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.StartInfo.CreateNoWindow&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.Start();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;cmd&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Application.StartupPath;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmd&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">@"</span><span style="COLOR: #000000">cd&nbsp;/d&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;cmd;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.StandardInput.WriteLine(cmd);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmd&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\</span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">&nbsp;+&nbsp;Application.StartupPath&nbsp;+&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">dex2jar.bat</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;+&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\</span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">&nbsp;+&nbsp;dexPath&nbsp;+&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">classes.dex</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;+&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\</span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;((Environment.OSVersion.Platform&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;PlatformID.Win32NT)&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;(Environment.OSVersion.Version.Major&nbsp;</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">))<br><img id=Codehighlighter1_814_932_Open_Image onclick="this.style.display='none'; Codehighlighter1_814_932_Open_Text.style.display='none'; Codehighlighter1_814_932_Closed_Image.style.display='inline'; Codehighlighter1_814_932_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_814_932_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_814_932_Closed_Text.style.display='none'; Codehighlighter1_814_932_Open_Image.style.display='inline'; Codehighlighter1_814_932_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_814_932_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_814_932_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmd&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Application.StartupPath&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">dex2jar.bat</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;dexPath&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">classes.dex</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.StandardInput.WriteLine(cmd);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.StandardInput.WriteLine(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">exit</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">string&nbsp;strOutput&nbsp;=&nbsp;null;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">strOutput&nbsp;=&nbsp;p.StandardOutput.ReadToEnd();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Console.WriteLine(strOutput);</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.WaitForExit();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.Close();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<br><br>ps：不知道什么原因，批处理命令的调用在xp和win7下的调用参数有点不同，多了一个引号参数。
<img src ="http://www.cppblog.com/AutomateProgram/aggbug/125136.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/AutomateProgram/" target="_blank">漂漂</a> 2010-08-29 11:03 <a href="http://www.cppblog.com/AutomateProgram/archive/2010/08/29/125136.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c#判断系统是xp还是更高版本</title><link>http://www.cppblog.com/AutomateProgram/archive/2010/08/27/124929.html</link><dc:creator>漂漂</dc:creator><author>漂漂</author><pubDate>Fri, 27 Aug 2010 03:52:00 GMT</pubDate><guid>http://www.cppblog.com/AutomateProgram/archive/2010/08/27/124929.html</guid><wfw:comment>http://www.cppblog.com/AutomateProgram/comments/124929.html</wfw:comment><comments>http://www.cppblog.com/AutomateProgram/archive/2010/08/27/124929.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/AutomateProgram/comments/commentRss/124929.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/AutomateProgram/services/trackbacks/124929.html</trackback:ping><description><![CDATA[原文地址:http://www.cnblogs.com/cyrix/articles/1708533.html<br><a id=ctl03_TitleUrl href="http://www.cnblogs.com/cyrix/articles/1708533.html"><font color=#000000></font></a>&nbsp;<br><span style="COLOR: #808080">///</span><span style="COLOR: #008000"> </span><span style="COLOR: #808080">&lt;summary&gt;</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #808080">///</span><span style="COLOR: #008000"> Gets a value indicating if the process is running in 64 bit environment.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #808080">///</span><span style="COLOR: #008000"> </span><span style="COLOR: #808080">&lt;/summary&gt;</span><span style="COLOR: #808080"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">unsafe</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000"> IsRunningOn64Bit<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #0000ff">get</span><span style="COLOR: #000000"> { </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> (</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(IntPtr) </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">)); } <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #808080">///</span><span style="COLOR: #008000"> </span><span style="COLOR: #808080">&lt;summary&gt;</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #808080">///</span><span style="COLOR: #008000"> Gets a value indicating if the operating system is a Windows 2000 or a newer one.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #808080">///</span><span style="COLOR: #008000"> </span><span style="COLOR: #808080">&lt;/summary&gt;</span><span style="COLOR: #808080"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000"> IsWindows2000OrNewer<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #0000ff">get</span><span style="COLOR: #000000"> { </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> (Environment.OSVersion.Platform </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> PlatformID.Win32NT) </span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000"> (Environment.OSVersion.Version.Major </span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">5</span><span style="COLOR: #000000">); }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #808080">///</span><span style="COLOR: #008000"> </span><span style="COLOR: #808080">&lt;summary&gt;</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #808080">///</span><span style="COLOR: #008000"> Gets a value indicating if the operating system is a Windows XP or a newer one.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #808080">///</span><span style="COLOR: #008000"> </span><span style="COLOR: #808080">&lt;/summary&gt;</span><span style="COLOR: #808080"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000"> IsWindowsXpOrNewer<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #0000ff">get</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Environment.OSVersion.Platform </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> PlatformID.Win32NT) </span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Environment.OSVersion.Version.Major </span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">6</span><span style="COLOR: #000000">) </span><span style="COLOR: #000000">||</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Environment.OSVersion.Version.Major </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">5</span><span style="COLOR: #000000">) </span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Environment.OSVersion.Version.Minor </span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">1</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #808080">///</span><span style="COLOR: #008000"> </span><span style="COLOR: #808080">&lt;summary&gt;</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #808080">///</span><span style="COLOR: #008000"> Gets a value indicating if the operating system is a Windows Vista or a newer one.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #808080">///</span><span style="COLOR: #008000"> </span><span style="COLOR: #808080">&lt;/summary&gt;</span><span style="COLOR: #808080"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000"> IsWindowsVistaOrNewer<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #0000ff">get</span><span style="COLOR: #000000"> { </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> (Environment.OSVersion.Platform </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> PlatformID.Win32NT) </span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000"> (Environment.OSVersion.Version.Major </span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">6</span><span style="COLOR: #000000">); }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br><br><br><br><br>编译项目：&#8220;可编译不安全代码&#8221;属性设置为true<br><br>方法如下：项目属性对话框</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">配置属性</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">生成</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">允许不安全代码块 设为</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">true\</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000"><br></span>
<img src ="http://www.cppblog.com/AutomateProgram/aggbug/124929.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/AutomateProgram/" target="_blank">漂漂</a> 2010-08-27 11:52 <a href="http://www.cppblog.com/AutomateProgram/archive/2010/08/27/124929.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>winform(C#)拖拽实现获得文件路径 </title><link>http://www.cppblog.com/AutomateProgram/archive/2010/08/26/124890.html</link><dc:creator>漂漂</dc:creator><author>漂漂</author><pubDate>Thu, 26 Aug 2010 13:49:00 GMT</pubDate><guid>http://www.cppblog.com/AutomateProgram/archive/2010/08/26/124890.html</guid><wfw:comment>http://www.cppblog.com/AutomateProgram/comments/124890.html</wfw:comment><comments>http://www.cppblog.com/AutomateProgram/archive/2010/08/26/124890.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/AutomateProgram/comments/commentRss/124890.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/AutomateProgram/services/trackbacks/124890.html</trackback:ping><description><![CDATA[<p>原文地址：<a href="http://www.cnblogs.com/ahuo/archive/2008/04/21/1164028.html">http://www.cnblogs.com/ahuo/archive/2008/04/21/1164028.html</a></p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Form1_DragDrop(</span><span style="COLOR: #0000ff">object</span><span style="COLOR: #000000">&nbsp;sender,&nbsp;DragEventArgs&nbsp;e)<br><img id=Codehighlighter1_68_220_Open_Image onclick="this.style.display='none'; Codehighlighter1_68_220_Open_Text.style.display='none'; Codehighlighter1_68_220_Closed_Image.style.display='inline'; Codehighlighter1_68_220_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_68_220_Closed_Image onclick="this.style.display='none'; Codehighlighter1_68_220_Closed_Text.style.display='none'; Codehighlighter1_68_220_Open_Image.style.display='inline'; Codehighlighter1_68_220_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id=Codehighlighter1_68_220_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_68_220_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;path&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;((System.Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">).ToString();<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(path);&nbsp;&nbsp;&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Form1_DragEnter(</span><span style="COLOR: #0000ff">object</span><span style="COLOR: #000000">&nbsp;sender,&nbsp;DragEventArgs&nbsp;e)<br><img id=Codehighlighter1_300_473_Open_Image onclick="this.style.display='none'; Codehighlighter1_300_473_Open_Text.style.display='none'; Codehighlighter1_300_473_Closed_Image.style.display='inline'; Codehighlighter1_300_473_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_300_473_Closed_Image onclick="this.style.display='none'; Codehighlighter1_300_473_Closed_Text.style.display='none'; Codehighlighter1_300_473_Open_Image.style.display='inline'; Codehighlighter1_300_473_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="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" id=Codehighlighter1_300_473_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_300_473_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(e.Data.GetDataPresent(DataFormats.FileDrop))<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.Effect&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;DragDropEffects.Link;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;e.Effect&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;DragDropEffects.None;&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<br>ps:AllowDrop的属性要设为true
<img src ="http://www.cppblog.com/AutomateProgram/aggbug/124890.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/AutomateProgram/" target="_blank">漂漂</a> 2010-08-26 21:49 <a href="http://www.cppblog.com/AutomateProgram/archive/2010/08/26/124890.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XML文件结构简单介绍</title><link>http://www.cppblog.com/AutomateProgram/archive/2010/08/26/124795.html</link><dc:creator>漂漂</dc:creator><author>漂漂</author><pubDate>Thu, 26 Aug 2010 03:32:00 GMT</pubDate><guid>http://www.cppblog.com/AutomateProgram/archive/2010/08/26/124795.html</guid><wfw:comment>http://www.cppblog.com/AutomateProgram/comments/124795.html</wfw:comment><comments>http://www.cppblog.com/AutomateProgram/archive/2010/08/26/124795.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/AutomateProgram/comments/commentRss/124795.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/AutomateProgram/services/trackbacks/124795.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: XML介绍            表面上, XML看起来像HTML. 两者都从标准通用标记语言(SGML)起源。产生HTML的工具能常常被再用来产生XML。XML在两个重要区域中是和HTML不同: 句法和语义.                                            XML句法                                ...&nbsp;&nbsp;<a href='http://www.cppblog.com/AutomateProgram/archive/2010/08/26/124795.html'>阅读全文</a><img src ="http://www.cppblog.com/AutomateProgram/aggbug/124795.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/AutomateProgram/" target="_blank">漂漂</a> 2010-08-26 11:32 <a href="http://www.cppblog.com/AutomateProgram/archive/2010/08/26/124795.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c#基础：正则表达式</title><link>http://www.cppblog.com/AutomateProgram/archive/2010/08/23/124445.html</link><dc:creator>漂漂</dc:creator><author>漂漂</author><pubDate>Mon, 23 Aug 2010 09:34:00 GMT</pubDate><guid>http://www.cppblog.com/AutomateProgram/archive/2010/08/23/124445.html</guid><wfw:comment>http://www.cppblog.com/AutomateProgram/comments/124445.html</wfw:comment><comments>http://www.cppblog.com/AutomateProgram/archive/2010/08/23/124445.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/AutomateProgram/comments/commentRss/124445.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/AutomateProgram/services/trackbacks/124445.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 原文地址：http://www.cnblogs.com/kissknife/archive/2008/03/23/1118423.html有一段时间，正则表达式学习很火热很潮流，当时在CSDN一天就能看到好几个正则表达式的帖子，那段时间借助论坛以及Wrox Press出版的《C#字符串和正则表达式参考手册》学习了一些基础的知识，同时也为我在CSDN大概赚了1000分，今天想起来，去找《C#字符...&nbsp;&nbsp;<a href='http://www.cppblog.com/AutomateProgram/archive/2010/08/23/124445.html'>阅读全文</a><img src ="http://www.cppblog.com/AutomateProgram/aggbug/124445.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/AutomateProgram/" target="_blank">漂漂</a> 2010-08-23 17:34 <a href="http://www.cppblog.com/AutomateProgram/archive/2010/08/23/124445.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c#基础，几个关键字的说明</title><link>http://www.cppblog.com/AutomateProgram/archive/2010/08/22/124340.html</link><dc:creator>漂漂</dc:creator><author>漂漂</author><pubDate>Sun, 22 Aug 2010 15:21:00 GMT</pubDate><guid>http://www.cppblog.com/AutomateProgram/archive/2010/08/22/124340.html</guid><wfw:comment>http://www.cppblog.com/AutomateProgram/comments/124340.html</wfw:comment><comments>http://www.cppblog.com/AutomateProgram/archive/2010/08/22/124340.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/AutomateProgram/comments/commentRss/124340.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/AutomateProgram/services/trackbacks/124340.html</trackback:ping><description><![CDATA[<p>原文地址：<a href="http://dev.firnow.com/course/4_webprogram/asp.net/netjs/2007118/85034.html">http://dev.firnow.com/course/4_webprogram/asp.net/netjs/2007118/85034.html</a><br>abstract class和interface是C#语言中对于抽象类定义进行支持的两种机制，正是由于这两种机制的存在，才赋予了C#强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性，甚至可以相互替换，因此很多开发者在进行抽象类定义时对于abstract class和interface的选择显得比较随意。</p>
<p>其实，两者之间还是有很大的区别的，对于它们的选择甚至反映出对于问题领域本质的理解、对于设计意图的理解是否正确、合理。本文将对它们之间的区别进行一番剖析，试图给开发者提供一个在二者之间进行选择的依据。<br>下面我们主要从设计理念层面看看abstract class和interface的区别！<br>abstarct class在C#语言中体现了一种继承关系，要想使得继承关系合理，父类和派生类之间必须存在"is a"关系，即父类和派生类在概念本质上应该是相同的。对于interface 来说则不然，并不要求interface的实现者和interface定义在概念本质上是一致的，仅仅是实现了interface定义的契约而已。为了使论述便于理解，下面将通过一个简单的实例进行说明。 </p>
<p>考虑这样一个例子，假设在我们的问题领域中有一个关于Door的抽象概念，该Door具有执行两个动作open和close，此时我们可以通过abstract class或者interface来定义一个表示该抽象概念的类型，定义方式分别如下所示：</p>
<p>使用abstract class方式定义Door： <br>&nbsp; <br>abstract class Door { <br>&nbsp;abstract void open(); <br>&nbsp;abstract void close()； <br>} <br>&nbsp; <br>使用interface方式定义Door： <br>&nbsp; <br>interface Door { <br>&nbsp;void open(); <br>&nbsp;void close(); <br>}&nbsp; </p>
<p>其他具体的Door类型可以extends使用abstract class方式定义的Door或者implements使用interface方式定义的Door。看起来好像使用abstract class和interface没有大的区别。</p>
<p>如果现在要求Door还要具有报警的功能。我们该如何设计针对该例子的类结构呢（在本例中，主要是为了展示abstract class和interface反映在设计理念上的区别，其他方面无关的问题都做了简化或者忽略）下面将罗列出可能的解决方案，并从设计理念层面对这些不同的方案进行分析。</p>
<p>解决方案一：</p>
<p>简单的在Door的定义中增加一个alarm方法，如下：</p>
<p>abstract class Door { <br>&nbsp;abstract void open(); <br>&nbsp;abstract void close()； <br>&nbsp;abstract void alarm(); <br>} <br>&nbsp; <br>&nbsp; <br>或者 <br>&nbsp; <br>interface Door { <br>&nbsp;void open(); <br>&nbsp;void close(); <br>&nbsp;void alarm(); <br>}&nbsp; </p>
<p>&nbsp;</p>
<p>class AlarmDoor :Door { <br>&nbsp;void open() { &#8230; } <br>&nbsp;void close() { &#8230; } <br>&nbsp;void alarm() { &#8230; } <br>} <br>&nbsp; <br>&nbsp; <br>或者 <br>&nbsp; <br>class AlarmDoor :Door ｛ <br>&nbsp;void open() { &#8230; } <br>&nbsp;void close() { &#8230; } <br>&nbsp;void alarm() { &#8230; } <br>｝&nbsp; </p>
<p>这种方法违反了面向对象设计中的一个核心原则ISP（Interface Segregation Priciple），在Door的定义中把Door概念本身固有的行为方法和另外一个概念"报警器"的行为方法混在了一起。这样引起的一个问题是那些仅仅依赖于Door这个概念的模块会因为"报警器"这个概念的改变（比如：修改alarm方法的参数）而改变，反之依然。 <br>解决方案二： </p>
<p>既然open、close和alarm属于两个不同的概念，根据ISP原则应该把它们分别定义在代表这两个概念的抽象类中。定义方式有：这两个概念都使用abstract class方式定义；两个概念都使用interface方式定义；一个概念使用abstract class方式定义，另一个概念使用interface方式定义。 </p>
<p>显然，由于Java语言不支持多重继承，所以两个概念都使用abstract class方式定义是不可行的。后面两种方式都是可行的，但是对于它们的选择却反映出对于问题领域中的概念本质的理解、对于设计意图的反映是否正确、合理。我们一一来分析、说明。 </p>
<p>如果两个概念都使用interface方式来定义，那么就反映出两个问题： </p>
<p>1、我们可能没有理解清楚问题领域，AlarmDoor在概念本质上到底是Door还是报警器？ </p>
<p>2、如果我们对于问题领域的理解没有问题，比如：我们通过对于问题领域的分析发现AlarmDoor在概念本质上和Door是一致的，那么我们在实现时就没有能够正确的揭示我们的设计意图，因为在这两个概念的定义上（均使用interface方式定义）反映不出上述含义。 </p>
<p>如果我们对于问题领域的理解是：AlarmDoor在概念本质上是Door，同时它有具有报警的功能。我们该如何来设计、实现来明确的反映出我们的意思呢？前面已经说过，abstract class在C#语言中表示一种继承关系，而继承关系在本质上是"is a"关系。所以对于Door这个概念，我们应该使用abstarct class方式来定义。另外，AlarmDoor又具有报警功能，说明它又能够完成报警概念中定义的行为，所以报警概念可以通过interface方式定义。如下所示：</p>
<p>abstract class Door {&nbsp; </p>
<p>abstract void open(); <br>&nbsp;abstract void close()； <br>} <br>interface Alarm { <br>&nbsp;void alarm(); <br>} <br>class AlarmDoor extends Door implements Alarm { <br>&nbsp;void open() { &#8230; } <br>&nbsp;void close() { &#8230; } <br>&nbsp;&nbsp;&nbsp; void alarm() { &#8230; } <br>}&nbsp; </p>
<p>这种实现方式基本上能够明确的反映出我们对于问题领域的理解，正确的揭示我们的设计意图。其实abstract class表示的是"is a"关系，interface表示的是"like a"关系，大家在选择时可以作为一个依据，当然这是建立在对问题领域的理解上的，比如：如果我们认为AlarmDoor在概念本质上是报警器，同时又具有Door的功能，那么上述的定义方式就要反过来了。 </p>
<p>abstract class和interface是C#语言中的两种定义抽象类的方式，它们之间有很大的相似性。但是对于它们的选择却又往往反映出对于问题领域中的概念本质的理解、对于设计意图的反映是否正确、合理，因为它们表现了概念间的不同的关系（虽然都能够实现需求的功能）。这其实也是语言的一种的惯用法，希望读者朋友能够细细体会。<br>&nbsp;<br>原文地址：<a href="http://www.cnblogs.com/yangbin990/archive/2005/09/13/236235.html">http://www.cnblogs.com/yangbin990/archive/2005/09/13/236235.html</a><br></p>
<p>参考:Abstract and Sealed Classes and Class Members (C# Programming Guide).<br>public abstract class A<br>{<br>&nbsp;&nbsp;&nbsp; // Class members here.<br>}<br>abstract :必须被继承.<br><br>public abstract class A<br>{<br>&nbsp;&nbsp;&nbsp; public abstract void DoWork(int i);<br>}<br>abstract class 里也可包含abstract 方法, 但方法就没有{}, 因为abstract 方法不可以有内容. 继承abstract class 的class 内部必须定义那些abstract 方法, 给他真正的含义.<br><br>// compile with: /target:library<br>public class D<br>{<br>&nbsp;&nbsp;&nbsp; public virtual void DoWork(int i)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Original implementation.<br>&nbsp;&nbsp;&nbsp; }<br>}<br><br>public abstract class E : D<br>{<br>&nbsp;&nbsp;&nbsp; public abstract override void DoWork(int i);<br>}<br><br>public class F : E<br>{<br>&nbsp;&nbsp;&nbsp; public override void DoWork(int i)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // New implementation.<br>&nbsp;&nbsp;&nbsp; }<br>}<br><br>virtual:儿子类看不到的方法, 也就是说不想让儿子看到的方法.<br></p>
<pre class=code id=ctl00_LibFrame_MainContent_ctl11 space="preserve">public sealed class D
{
// Class members here.
}
sealed:sealed class 不可以做base class,也就是说不可以被继承.当然也不可以和abstract 同时出现, 因为正好互相抵触.</pre>
<pre class=code space="preserve">&nbsp;</pre>
<pre class=code space="preserve">原文地址：<a href="http://www.cnblogs.com/3stones/archive/2007/03/22/684694.html">http://www.cnblogs.com/3stones/archive/2007/03/22/684694.html</a></pre>
<pre class=code space="preserve">&nbsp;</pre>
<pre class=code space="preserve">
<div class=tit>c#中的interface abstract 与 virtual</div>
<div class=date>2007-02-13 10:42</div>
<table style="TABLE-LAYOUT: fixed">
    <tbody>
        <tr>
            <td>
            <div class=cnt><span>&nbsp;
            <p><strong><font color=#993300>interface用来声明接口</font></strong><br>1.只提供一些方法规约，不提供方法主体.&nbsp;&nbsp;如:<br><font style="BACKGROUND-COLOR: #ffffff" color=#006600>public&nbsp;interface&nbsp;IPerson<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;getName();//不包含方法主体<br>}</font><br>2.方法不能用public&nbsp;abstract等修饰,无字段变量，无构造函数。<br>3.方法可包含参数。&nbsp;&nbsp;如&nbsp;&nbsp;<br><font color=#006600>&nbsp;&nbsp;public&nbsp;interface&nbsp;IPerson<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;getAge(string&nbsp;s);<br>&nbsp;&nbsp;}</font></p>
            <p>&nbsp;&nbsp;一个例子(例1)：<br>public&nbsp;interface&nbsp;IPerson<br>{&nbsp;<br>&nbsp;&nbsp;&nbsp;IPerson();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//错误<br>&nbsp;&nbsp;&nbsp;string&nbsp;name;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//错误<br>&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;getIDcard();//错误</p>
            <p>&nbsp;&nbsp;&nbsp;void&nbsp;getName();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//right<br>&nbsp;&nbsp;&nbsp;void&nbsp;getAge(string&nbsp;s);&nbsp;&nbsp;//right<br>}</p>
            <p>实现interface的类<br>1.与<font color=#ff0000>继承类</font>的格式一致，如&nbsp;public&nbsp;class&nbsp;Chinese:IPerson{}<br>2.必须实现&nbsp;interface&nbsp;中的各个方法</p>
            <p>&nbsp;&nbsp;&nbsp;例2，继承例1<br>public&nbsp;class&nbsp;Chinese:IPerson<br>{&nbsp;<br>&nbsp;&nbsp;&nbsp;public&nbsp;Chinese(){}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//添加构造<br>&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;getName(){}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//实现getName()<br>&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;getAge(string&nbsp;s){}&nbsp;//实现getAge()<br>}</p>
            <p><strong><font color=#993300>abstract声明抽象类、抽象方法</font></strong><br>1.抽象方法所在类必须为抽象类<br>2.抽象类不能直接实例化，必须由其派生类实现。<br>3.抽象方法不包含方法主体，必须由派生类以override方式实现此方法,这点跟interface中的方法类似</p>
            <p>&nbsp;&nbsp;如<br><font color=#006600>public&nbsp;abstract&nbsp;class&nbsp;Book<br>{<br>&nbsp;&nbsp;public&nbsp;Book()<br>&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;}</font></p>
            <p><font color=#006600>&nbsp;&nbsp;public&nbsp;abstract&nbsp;void&nbsp;getPrice();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#333333>//抽象方法，不含主体<br></font>&nbsp;&nbsp;public&nbsp;virtual&nbsp;void&nbsp;getName()&nbsp;&nbsp;&nbsp;<font color=#333333>//虚方法，可覆盖<br></font>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("this&nbsp;is&nbsp;a&nbsp;test:virtual&nbsp;getName()");<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;public&nbsp;virtual&nbsp;void&nbsp;getContent()&nbsp;&nbsp;<font color=#333333>&nbsp;//虚方法，可覆盖<br></font>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("this&nbsp;is&nbsp;a&nbsp;test:virtual&nbsp;getContent()");<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;public&nbsp;void&nbsp;getDate()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#333333>//一般方法，若在派生类中重写，须使用<font color=#ff0000>new</font>关键字<br></font>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("this&nbsp;is&nbsp;a&nbsp;test:&nbsp;void&nbsp;getDate()");<br>&nbsp;&nbsp;&nbsp;}<br>}</font></p>
            <p><font color=#006600>public&nbsp;class&nbsp;JavaBook:Book<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;override&nbsp;void&nbsp;getPrice()&nbsp;<font color=#333333>&nbsp;&nbsp;//实现抽象方法，必须实现<br></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("this&nbsp;is&nbsp;a&nbsp;test:JavaBook&nbsp;override&nbsp;abstract&nbsp;getPrice()");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;override&nbsp;void&nbsp;getName()&nbsp;&nbsp;&nbsp;<font color=#333333>//覆盖原方法，不是必须的<br></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("this&nbsp;is&nbsp;a&nbsp;test:JavaBook&nbsp;override&nbsp;virtual&nbsp;getName()");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>}</font></p>
            <p>&nbsp;测试如下：<br><font color=#006600>public&nbsp;class&nbsp;test<br>{<br>&nbsp;&nbsp;&nbsp;public&nbsp;test()<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;JavaBook&nbsp;jbook=new&nbsp;JavaBook();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jbook.getPrice();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#333333>&nbsp;//将调用JavaBook中getPrice()<br></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jbook.getName();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#333333>&nbsp;&nbsp;//将调用JavaBook中getName()<br></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jbook.getContent();&nbsp;&nbsp;&nbsp;<font color=#333333>&nbsp;//将调用Book中getContent()<br></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jbook.getDate();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#333333>&nbsp;//将调用Book中getDate()</font></font></p>
            <p><font color=#006600>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;Main()<br>&nbsp;&nbsp;&nbsp;{</font></p>
            <p><font color=#006600>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test&nbsp;t=new&nbsp;test();<br>&nbsp;&nbsp;&nbsp;}<br>}</font></p>
            <p><font color=#993300><strong>virtual标记方法为虚方法</strong><br></font>1.可在派生类中以override覆盖此方法<br>2.不覆盖也可由对象调用<br>3.无此标记的方法(也无其他标记)，重写时需用new隐藏原方法</p>
            <p>abstract&nbsp;与virtual&nbsp;:&nbsp;方法重写时都使用&nbsp;override&nbsp;关键字<br>interface中的方法和abstract方法都要求实现<br><br><br>原文地址：<a href="http://www.cnblogs.com/Dlonghow/archive/2008/07/26/1251974.html">http://www.cnblogs.com/Dlonghow/archive/2008/07/26/1251974.html</a><br><br></p>
            <h1 class=postTitle><a class=postTitle2 id=ctl04_TitleUrl href="http://www.cnblogs.com/Dlonghow/archive/2008/07/26/1251974.html"><font color=#1a8bc8>C# 参考：internal 关键字使用小结</font></a></h1>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最近在忙于Silverlight 上打印功能的实现，采用<span style="COLOR: red">Report Definition Language<span style="COLOR: #000000">(</span>RDL<span style="COLOR: #000000">) </span></span>（一种&nbsp;SQL Server 基于报表定义规范）。大体情况是：项目中一种原有的数据格式需要转换成一种通用的数据格式，由它来生成生成各种类型的文档（PDF、BMP等）。</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在定义框架的控件类时，真正对<span style="COLOR: red">internal </span>访问修饰符有了较深的认识和使用，特总结如下，供参考：</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp; 1. <strong>internal</strong> 关键字是类型和类型成员的访问修饰符。内部成员只有在同一程序集中的文件内才是可访问的。有关程序集的更多信息，请参见<a href="http://msdn.microsoft.com/library/CHS/vbcon/html/vbconComponentsAssemblies.asp"><font color=#1a8bc8>组件和程序集</font></a>。</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp; 2. 内部访问通常用于<span style="COLOR: #ff0000">基于组件</span>的开发，因为它使一组组件能够以私有方式进行合作，而不必向应用程序代码的其余部分公开。</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;例如，用于生成图形用户界面的框架可以提供&#8220;控件&#8221;类和&#8220;窗体&#8221;类，这些类通过使用具有内部访问能力的成员进行合作。由于这些成员是内部的，它们不向正在使用框架的代码公开。</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在定义具有内部访问能力的成员的程序集外部，引用该成员是错误的</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="FONT-FAMILY: courier new"><strong class=le><span style="COLOR: #ff0000"><span style="FONT-FAMILY: courier new"><strong class=le>警告</strong></span></span>&nbsp;&nbsp;</strong>尽管不能用 C# 重写 <strong>internal</strong> <strong>virtual</strong> 方法，但可以用某些语言（如使用 Ilasm.exe 的文本 Microsoft 中间语言 (MSIL) 重写它。</span><span style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: 新宋体"><span style="FONT-SIZE: 8pt"><span style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: 新宋体">有关 <strong>internal</strong> <font face="Courier New">和其他访问修饰符的比较请参见 </font></span></span></span></span></span><a href="http://msdn.microsoft.com/library/CHS/csref/html/vclrfdeclaredaccessibilitypg.asp"><span style="FONT-FAMILY: courier new"><span style="FONT-FAMILY: 新宋体"><font color=#1a8bc8>可访问性级别</font></span></span></a><span style="FONT-FAMILY: courier new">。</span></p>
            <p><br></p>
            </span></div>
            </td>
        </tr>
    </tbody>
</table>
<br><br><br><br><br><br><br><br><br>&nbsp;</pre>
<img src ="http://www.cppblog.com/AutomateProgram/aggbug/124340.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/AutomateProgram/" target="_blank">漂漂</a> 2010-08-22 23:21 <a href="http://www.cppblog.com/AutomateProgram/archive/2010/08/22/124340.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C#中 Reference Equals, == , Equals的区别</title><link>http://www.cppblog.com/AutomateProgram/archive/2010/08/22/124338.html</link><dc:creator>漂漂</dc:creator><author>漂漂</author><pubDate>Sun, 22 Aug 2010 15:16:00 GMT</pubDate><guid>http://www.cppblog.com/AutomateProgram/archive/2010/08/22/124338.html</guid><wfw:comment>http://www.cppblog.com/AutomateProgram/comments/124338.html</wfw:comment><comments>http://www.cppblog.com/AutomateProgram/archive/2010/08/22/124338.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/AutomateProgram/comments/commentRss/124338.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/AutomateProgram/services/trackbacks/124338.html</trackback:ping><description><![CDATA[<p>原文地址：<a href="http://blog.csdn.net/wuchen_net/archive/2010/03/23/5409327.aspx">http://blog.csdn.net/wuchen_net/archive/2010/03/23/5409327.aspx</a><br>1. ReferenceEquals, == , Equals <br>Equals , == , ReferenceEquals都可以用于判断两个对象的个体是不是相等。 </p>
<p>a) ReferenceEquals <br>ReferenceEquals是Object的静态方法，用于比较两个引用类型的对象是否是对于同一个对象的引用。对于值类型它总是返回false。（因为Box以后的对象总是不同的，hehe） </p>
<p>b) ==是一个可以重载的二元操作符,可以用于比较两个对象是否相等。 <br>对于内置值类型，==判断的是两个对象的代数值是否相等。它会根据需要自动进行必要的类型转换，并根据两个对象的值是否相等返回true或者false。例如： </p>
<p>Int a = 100; <br>Double b =100; </p>
<p>If(a == b) <br>Console.WriteLine(&#8220;equal supports compare between different types!&#8221;); </p>
<p>上面这段程序将会输出： <br>equal supports compare between different types! </p>
<p>而对于用户定义的值类型，如果没有重载==操作符，==将是不能够使用的。例如：</p>
<p><br>Struct Userstruct1; <br>Userstruct1 a; <br>Userstruct1 b; </p>
<p>If(a == b) <br>Console.WriteLine(&#8220;can == reach this far?&#8221;) </p>
<p>上面的这段代码是不能够通过编译的。可以通过重载使==作用于用户定义的值类型。 </p>
<p>对于引用类型，== 默认的行为与ReferenceEquals的行为相同，仅有两个对象指向同一个Reference的时候才返回true。但是.NET Framework中的类很多对==进行了重载，例如String类的==与Equals的行为相同，判断两个字符串的内容是否相等。所以在应用中，对于 系统定义的引用类型建议不要使用==操作符，以免程序出现与预期不同的运行结果。 </p>
<p>c) Equals 作为Object内置方法，Equals支持对于任意两个CTSCommon Type System对象的比较。 <br>Equals它有静态方法和可重载的一个版本，下面的程序片断解释了这两个方法的用法， </p>
<p>int a = 5; <br>int b = 5; </p>
<p>If(Object.Equals(a ,b)) <br>// you can also use if(a.Equals(b)) <br>{ <br>Console.WriteLine(&#8220;a is equal to b&#8221;); <br>} </p>
<p>事实上，这两个版本的结果完全相同，如果用户重载了Equals，调用的都是用户重载后的Equals。Equals的静态方法的好处是可以不必考虑用于比较的对象是否为null。 </p>
<p>Equals方法对于值类型和引用类型的定义不同，对于值类型，类型相同，并且数值相同(对于struct的每个成员都必须相同)，则Equals返回 true,否则返回false。而对于引用类型，默认的行为与ReferenceEquals的行为相同，仅有两个对象指向同一个Reference的时 候才返回true。可以根据需要对Equals进行重载，例如String类的Equals用于判断两个字符串的内容是否相等。 </p>
<p><br>//StringBuilder 类<br>//表示可变字符字符串。无法继承此类。</p>
<p><br>StringBuilder a = new StringBuilder(); <br>a.Append("the test a"); <br>String s1 = a.ToString(); <br>String s2 = "the test a"; </p>
<p>if (s2 == s1) <br>Console.WriteLine("== returns true"); </p>
<p>if (Object.Equals(s2, s1)) <br>{ <br>Console.WriteLine("equals returns true"); <br>} </p>
<p>if (Object.ReferenceEquals(s2, s1)) <br>{ <br>Console.WriteLine("ReferenceEquals returns true"); <br>} </p>
<p>这个实例将输出： <br>== returns true <br>equals returns true </p>
<p>注：对于String类，直接声明s1 = &#8220;the test a&#8221;的话，输出结果将包含 "ReferenceEquals returns true"， <br>因为默认的，String对于声明的相同的字符串在堆上只保留一个Copy，所以s1与s2将会指向相同的Reference<br>。<br><a href="http://javasky.bloghome.cn/posts/142567.html">http://javasky.bloghome.cn/posts/142567.html</a></p>
<p>在讨论了运算符，并简要介绍了等于运算符后，就应考虑在处理类和结构的实例时相等意味着什么。理解对象相等比较的机制对编写逻辑表达式非常重要，另外，对实现运算符重载和数据类型转换也非常重要，本章的后面将讨论运算符重载。</p>
<p>&nbsp;&nbsp;&nbsp; 对象相等比较的机制对于引用类型(类的实例)的比较和值类型(基本数据类型，结构或枚举的实例)的比较来说是不同的。下面分别介绍引用类型和值类型的相等比较。</p>
<p>&nbsp;&nbsp; 5.3.1 引用类型的相等比较</p>
<p>&nbsp;&nbsp;&nbsp; System.Object的一个初看上去令人惊讶的方面是它定义了3个不同的方法，来比较对象的相等性：ReferenceEquals()和Equals()的两个版本。再加上比较运算符==，实际上有4种进行相等比较的方式。这些方法有一些微妙的区别，下面就介绍这些方法。</p>
<p>================================================================</p>
<p>下面的最明了</p>
<p>1. ReferenceEquals()方法</p>
<p>&nbsp;&nbsp;&nbsp; ReferenceEquals()是一个静态方法，测试两个引用是否指向类的同一个实例，即两个引用是否包含内存中的相同地址。作为静态方法，它不能重写，所以只能使用System.Object的实现代码。如果提供的两个引用指向同一个对象实例，ReferenceEquals()总是返回true，否则就返回false。但是它认为null等于null：</p>
<p>SomeClass x, y;</p>
<p>x = new SomeClass();</p>
<p>y = new SomeClass();</p>
<p>bool B1 = ReferenceEquals(null, null);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //return true</p>
<p>bool B2 = ReferenceEquals(null, x);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //return false</p>
<p>bool B3 = ReferenceEquals(x, y);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //return false because x and y</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //point to different objects</p>
<p>2. 虚拟的Equals()方法</p>
<p>&nbsp;&nbsp;&nbsp; Equals()虚拟版本的System.Object实现代码也比较引用。但因为这个方法是虚拟的，所以可以在自己的类中重写它，按值来比较对象。特别是如果希望类的实例用作字典中的键，就需要重写这个方法，以比较值。否则，根据重写Object.GetHashCode()的方式，包含对象的字典类要么不工作，要么工作的效率非常低。在重写Equals()方法时要注意，重写的代码不会抛出异常。这是因为如果抛出异常，字典类就会出问题，一些在内部调用这个方法的.NET基类也可能出问题。</p>
<p>3. 静态的Equals()方法</p>
<p>&nbsp;&nbsp;&nbsp; Equals()的静态版本与其虚拟实例版本的作用相同，其区别是静态版本带有两个参数，并对它们进行相等比较。这个方法可以处理两个对象中有一个是null的情况，因此，如果一个对象可能是null，这个方法就可以抛出异常，提供了额外的保护。静态重载版本首先要检查它传送的引用是否为null。如果它们都是null，就返回true(因为null与null相等)。如果只有一个引用是null，就返回false。如果两个引用都指向某个对象，它就调用Equals()的虚拟实例版本。这表示在重写Equals()的实例版本时，其效果相当于也重写了静态版本。[Page]</p>
<p>4. 比较运算符＝＝</p>
<p>最好将比较运算符看作是严格值比较和严格引用比较之间的中间选项。在大多数情况下，下面的代码：</p>
<p>bool b = (x == y);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //x, y object references</p>
<p>&nbsp;&nbsp; 表示比较引用。但是，如果把一些类看作值，其含义就会比较直观。在这些情况下，最好重写比较运算符，以执行值的比较。后面将讨论运算符的重载，但显然它的一个例子是System.String类，Microsoft重写了这个运算符，比较字符串的内容，而不是它们的引用。</p>
<p>5.3.2 值类型的相等比较</p>
<p>在进行值类型的相等比较时，采用与引用类型相同的规则：ReferenceEquals()用于比较引用，Equals()用于比较值，比较运算符可以看作是一个中间项。但最大的区别是值类型需要装箱，才能把它们转换为引用，才能对它们执行方法。另外，Microsoft已经在System.ValueType类中重载了实例方法Equals()，以便对值类型进行合适的相等测试。如果调用sA.Equals(sB)，其中sA和sB是某个结构的实例，则根据sA和sB是否在其所有的字段中包含相同的值，而返回true或false。另一方面，在默认情况下，不能对自己的结构重载==运算符。在表达式中使用(sA==sB)会导致一个编译错误，除非在代码中为结构提供了==的重载版本。</p>
<p>另外，ReferenceEquals()在应用于值类型时，总是返回false，因为为了调用这个方法，值类型需要装箱到对象中。即使使用下面的代码：</p>
<p>bool b = ReferenceEquals(v, v);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //v is a variable of some value type</p>
<p>也会返回false，因为在转换每个参数时，v都会被单独装箱，这意味着会得到不同的引用。调用ReferenceEquals()来比较值类型实际上没有什么意义。</p>
<p>尽管System.ValueType提供的Equals()默认重载肯定足以应付绝大多数自定义的结构，但仍可以为自己的结构重写它，以提高性能。另外，如果值类型包含作为字段的引用类型，就需要重写Equals()，以便为这些字段提供合适的语义，因为Equals()的默认重写版本仅比较它们的地址。</p>
<p><a href="http://www.zxbc.cn/html/20070809/25909.html">http://www.zxbc.cn/html/20070809/25909.html</a></p>
<p>====================================================================================================================</p>
<p><a href="http://msdn.microsoft.com/zh-cn/library/bsc2ak47(VS.80).aspx">http://msdn.microsoft.com/zh-cn/library/bsc2ak47(VS.80).aspx</a></p>
<p>Object.Equals 方法 (Object)<br>确定指定的 Object 是否等于当前的 Object。</p>
<p>参数<br>obj <br>与当前的 Object 进行比较的 Object。</p>
<p>返回值<br>如果指定的 Object 等于当前的 Object，则为 true；否则为 false。</p>
<p>&nbsp;备注<br>Equals 的默认实现仅支持引用相等，但派生类可重写此方法以支持值相等。</p>
<p>对于引用类型，相等定义为对象相等；即这些引用是否引用同一对象。对于值类型，相等定义为按位相等。ValueType 类支持值类型。</p>
<p>给实现者的说明 此方法可由派生类重写。例如，如果两个对象表示相同的值，则许多基数据类型返回 true；否则返回 false。 此方法仅比较基元和对象。若要比较更复杂的结构（如对象数组），必须重写该方法。 下面的语句对于 Equals 方法的所有实现均必须为真。在列表中，x、y 和 z 表示不为 空引用（在 Visual Basic 中为 Nothing） 的对象引用。</p>
<p>除涉及浮点型的情况外，x.Equals(x) 都返回 true。请参见 IEC 60559:1989, Binary Floating-point Arithmetic for Microprocessor Systems。</p>
<p>x.Equals(y) 返回与 y.Equals(x) 相同的值。</p>
<p>如果 x 和 y 都为 NaN，则 x.Equals(y) 返回 true。</p>
<p>当且仅当 x.Equals(z) 返回 true 时，(x.Equals(y) &amp;&amp; y.Equals(z)) 才返回 true。</p>
<p>只要不修改 x 和 y 引用的对象，对 x.Equals(y) 的相继调用将返回相同的值。</p>
<p>x.Equals(空引用（在 Visual Basic 中为 Nothing）) 返回 false。</p>
<p>有关属于 Equals 方法的其他必需行为，请参见 GetHashCode。 Equals 的实现必须不引发异常。 对于某些类型的对象，最好让 Equals 测试值相等性而非引用相等性。如果两个对象具有相同的&#8220;值&#8221;，那么即使它们不是同一实例，这样的 Equals 实现仍返回 true。类型实施者决定对象的&#8220;值&#8221;的构成，但这通常是存储在对象的实例变量中的部分或全部数据。例如，String 的值基于字符串的字符；对于两个按同样的顺序包含完全相同的字符的字符串实例，String 类的 Equals 方法返回 true。 实现 IComparable 的类型必须重写 Equals。 重写 Equals 的类型也必须重写 GetHashCode；否则，Hashtable 可能不正常工作。 如果编程语言支持运算符重载，并且您选择了重载给定类型的相等运算符，则该类型必须重写 Equals 方法。这样的 Equals 方法实现必须返回与相等运算符相同的结果。遵照此准则有助于确保使用 Equals 的类库代码（如 ArrayList 和 Hashtable）的行为方式与应用程序代码使用的相等运算符的方式一致。 下面是针对实现值类型的准则： <br>考虑重写 Equals，以便在 ValueType 上获得比 Equals 的默认实现所提供的性能增强的性能。</p>
<p>如果重写 Equals 并且语言支持运算符重载，则必须重载值类型的相等运算符。</p>
<p>下面是针对实现引用类型的准则： <br>如果引用类型的语义是基于该类型表示某个（些）值的事实，则考虑对该类型重写 Equals。</p>
<p>即使大多数引用类型重写 Equals，它们也必须不能重载相等运算符。但是，如果实现的引用类型想要具有值语义（如复杂的数字类型），则必须重写相等运算符。</p>
<p>using System;</p>
<p>public class Sample {<br>&nbsp;&nbsp;&nbsp; void Method() {<br>&nbsp;&nbsp;&nbsp; Object Obj1 = new Object();<br>&nbsp;&nbsp;&nbsp; Object Obj2 = new Object();<br>&nbsp;&nbsp;&nbsp; Console.WriteLine(Obj1.Equals(Obj2)); //===&gt; false<br>&nbsp;&nbsp;&nbsp; Obj2 = Obj1;<br>&nbsp;&nbsp;&nbsp; Console.WriteLine(Obj1.Equals(Obj2)); //===&gt; true<br>&nbsp;&nbsp;&nbsp; }<br>}</p>
<p>===================================================</p>
<p>Object.Equals 方法 (Object, Object)</p>
<p>确定指定的 Object 实例是否被视为相等。</p>
<p>参数<br>objA <br>要比较的第一个 Object。</p>
<p>objB <br>要比较的第二个 Object。</p>
<p>返回值<br>如果 objA 是与 objB 相同的实例，或者如果两者均为空引用，或者如果 objA.Equals(objB) 返回 true，则为 true；否则为 false。</p>
<p>&nbsp;备注<br>Equals 的默认实现仅支持引用相等，但派生类可重写此方法以支持值相等。</p>
<p>对于引用类型，相等定义为对象相等；即这些引用是否引用同一对象。对于值类型，相等定义为按位相等。ValueType 类支持值类型。</p>
<p>在调用 objA.Equals(objB) 前，此方法首先检查两个参数是否均为空引用。</p>
<p>&nbsp;示例<br>下面的代码示例比较不同的对象。</p>
<p>C# </p>
<p>&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_36_754_Open_Image onclick="this.style.display='none'; Codehighlighter1_36_754_Open_Text.style.display='none'; Codehighlighter1_36_754_Closed_Image.style.display='inline'; Codehighlighter1_36_754_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_36_754_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_36_754_Closed_Text.style.display='none'; Codehighlighter1_36_754_Open_Image.style.display='inline'; Codehighlighter1_36_754_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;MyClass&nbsp;</span><span id=Codehighlighter1_36_754_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_36_754_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_67_752_Open_Image onclick="this.style.display='none'; Codehighlighter1_67_752_Open_Text.style.display='none'; Codehighlighter1_67_752_Closed_Image.style.display='inline'; Codehighlighter1_67_752_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_67_752_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_67_752_Closed_Text.style.display='none'; Codehighlighter1_67_752_Open_Image.style.display='inline'; Codehighlighter1_67_752_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Main()&nbsp;</span><span id=Codehighlighter1_67_752_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_67_752_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;s1&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Tom</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;s2&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Carol</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img id=Codehighlighter1_154_156_Open_Image onclick="this.style.display='none'; Codehighlighter1_154_156_Open_Text.style.display='none'; Codehighlighter1_154_156_Closed_Image.style.display='inline'; Codehighlighter1_154_156_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_154_156_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_154_156_Closed_Text.style.display='none'; Codehighlighter1_154_156_Open_Image.style.display='inline'; Codehighlighter1_154_156_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Object.Equals(\</span><span style="COLOR: #000000">"</span><span id=Codehighlighter1_154_156_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_154_156_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;\</span><span style="COLOR: #000000">"</span><span id=Codehighlighter1_165_167_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_165_167_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)&nbsp;=&gt;&nbsp;{2}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s1,&nbsp;s2,&nbsp;Object.Equals(s1,&nbsp;s2));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;s1&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Tom</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;s2&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Tom</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img id=Codehighlighter1_291_293_Open_Image onclick="this.style.display='none'; Codehighlighter1_291_293_Open_Text.style.display='none'; Codehighlighter1_291_293_Closed_Image.style.display='inline'; Codehighlighter1_291_293_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_291_293_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_291_293_Closed_Text.style.display='none'; Codehighlighter1_291_293_Open_Image.style.display='inline'; Codehighlighter1_291_293_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Object.Equals(\</span><span style="COLOR: #000000">"</span><span id=Codehighlighter1_291_293_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_291_293_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;\</span><span style="COLOR: #000000">"</span><span id=Codehighlighter1_302_304_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_302_304_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)&nbsp;=&gt;&nbsp;{2}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s1,&nbsp;s2,&nbsp;Object.Equals(s1,&nbsp;s2));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;s1&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;s2&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Tom</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img id=Codehighlighter1_433_435_Open_Image onclick="this.style.display='none'; Codehighlighter1_433_435_Open_Text.style.display='none'; Codehighlighter1_433_435_Closed_Image.style.display='inline'; Codehighlighter1_433_435_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_433_435_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_433_435_Closed_Text.style.display='none'; Codehighlighter1_433_435_Open_Image.style.display='inline'; Codehighlighter1_433_435_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Object.Equals(null,&nbsp;\</span><span style="COLOR: #000000">"</span><span id=Codehighlighter1_433_435_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_433_435_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)&nbsp;=&gt;&nbsp;{2}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s1,&nbsp;s2,&nbsp;Object.Equals(s1,&nbsp;s2));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;s1&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Carol</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;s2&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br><img id=Codehighlighter1_560_562_Open_Image onclick="this.style.display='none'; Codehighlighter1_560_562_Open_Text.style.display='none'; Codehighlighter1_560_562_Closed_Image.style.display='inline'; Codehighlighter1_560_562_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_560_562_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_560_562_Closed_Text.style.display='none'; Codehighlighter1_560_562_Open_Image.style.display='inline'; Codehighlighter1_560_562_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Object.Equals(\</span><span style="COLOR: #000000">"</span><span id=Codehighlighter1_560_562_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_560_562_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;null)&nbsp;=&gt;&nbsp;{2}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s1,&nbsp;s2,&nbsp;Object.Equals(s1,&nbsp;s2));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;s1&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;s2&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Object.Equals(null,&nbsp;null)&nbsp;=&gt;&nbsp;{2}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s1,&nbsp;s2,&nbsp;Object.Equals(s1,&nbsp;s2));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_755_986_Open_Image onclick="this.style.display='none'; Codehighlighter1_755_986_Open_Text.style.display='none'; Codehighlighter1_755_986_Closed_Image.style.display='inline'; Codehighlighter1_755_986_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_755_986_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_755_986_Closed_Text.style.display='none'; Codehighlighter1_755_986_Open_Image.style.display='inline'; Codehighlighter1_755_986_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>}</span></span><span id=Codehighlighter1_755_986_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_755_986_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>This&nbsp;code&nbsp;produces&nbsp;the&nbsp;following&nbsp;output.<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>Object.Equals("Tom",&nbsp;"Carol")&nbsp;=&gt;&nbsp;False<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>Object.Equals("Tom",&nbsp;"Tom")&nbsp;=&gt;&nbsp;True<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>Object.Equals(null,&nbsp;"Tom")&nbsp;=&gt;&nbsp;False<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>Object.Equals("Carol",&nbsp;null)&nbsp;=&gt;&nbsp;False<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>Object.Equals(null,&nbsp;null)&nbsp;=&gt;&nbsp;True<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #008000">*/</span></span></div>
<li sizset="16" sizcache="1">
<div sizset="16" sizcache="1">
<div sizset="16" sizcache="1">
<div class=MTPS_CollapsibleRegion sizset="16" sizcache="1">
<div class=MTPS_CollapsibleSection sizset="16" sizcache="1">
<div class=libCScode sizset="16" sizcache="1">
<div class=title>Object.ReferenceEquals 方法</div>
<p><br><br>&nbsp;</p>
<div sizset="16" sizcache="1"><br>
<div sizset="16" sizcache="1"><br>
<p>确定指定的 <strong>Object</strong> 实例是否是相同的实例。</p>
<br>
<h4 class=subHeading>参数</h4>
<br>
<dl sizset="16" sizcache="1">
<dt><span class=parameter><em>objA</em></span>
<dd><br>
<p>要比较的第一个 <a href="http://msdn.microsoft.com/zh-cn/library/system.object(VS.80).aspx"><span style="COLOR: #0033cc"><u>Object</u></span></a>。</p>
<br></dd></dl>
<dl sizset="17" sizcache="1">
<dt><span class=parameter><em>objB</em></span>
<dd><br>
<p>要比较的第二个 <strong>Object</strong>。</p>
<br></dd></dl><br><br><br>
<h4 class=subHeading>返回值</h4>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<li>
<div>
<div>
<div class=MTPS_CollapsibleRegion>
<div class=MTPS_CollapsibleSection>
<div class=libCScode>
<div>
<div>
<h4 class=subHeading>如果 <span class=parameter><em>objA</em></span> 是与 <span class=parameter><em>objB</em></span> 相同的实例，或者如果二者都为空引用，则为 <strong>true</strong>；否则为 <strong>false</strong>。</h4>
<br>
<div class=MTPS_CollapsibleRegion><br>
<div class=CollapseRegionLink><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; VERTICAL-ALIGN: middle; BORDER-RIGHT-WIDTH: 0px" alt="" src="http://i.msdn.microsoft.com/platform/Controls/CollapsibleArea/resources/minus.gif"> 示例<br></div>
<div class=MTPS_CollapsibleSection style="DISPLAY: block; OVERFLOW: visible; WIDTH: auto; HEIGHT: auto">
<div class=MTPS_CollapsibleSection style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; DISPLAY: block; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none">
<p>下面的代码示例使用 <strong>ReferenceEquals</strong> 确定两个对象是否是相同的实例。</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</li>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_29_317_Open_Image onclick="this.style.display='none'; Codehighlighter1_29_317_Open_Text.style.display='none'; Codehighlighter1_29_317_Closed_Image.style.display='inline'; Codehighlighter1_29_317_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_29_317_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_29_317_Closed_Text.style.display='none'; Codehighlighter1_29_317_Open_Image.style.display='inline'; Codehighlighter1_29_317_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;MyClass&nbsp;</span><span id=Codehighlighter1_29_317_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_29_317_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_54_315_Open_Image onclick="this.style.display='none'; Codehighlighter1_54_315_Open_Text.style.display='none'; Codehighlighter1_54_315_Closed_Image.style.display='inline'; Codehighlighter1_54_315_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_54_315_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_54_315_Closed_Text.style.display='none'; Codehighlighter1_54_315_Open_Image.style.display='inline'; Codehighlighter1_54_315_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Main()&nbsp;</span><span id=Codehighlighter1_54_315_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_54_315_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">object</span><span style="COLOR: #000000">&nbsp;o&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">object</span><span style="COLOR: #000000">&nbsp;p&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">object</span><span style="COLOR: #000000">&nbsp;q&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Object();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(Object.ReferenceEquals(o,&nbsp;p));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;q;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(Object.ReferenceEquals(p,&nbsp;q));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(Object.ReferenceEquals(o,&nbsp;p));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_320_384_Open_Image onclick="this.style.display='none'; Codehighlighter1_320_384_Open_Text.style.display='none'; Codehighlighter1_320_384_Closed_Image.style.display='inline'; Codehighlighter1_320_384_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_320_384_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_320_384_Closed_Text.style.display='none'; Codehighlighter1_320_384_Open_Image.style.display='inline'; Codehighlighter1_320_384_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_320_384_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_320_384_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>This&nbsp;code&nbsp;produces&nbsp;the&nbsp;following&nbsp;output.<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>True<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>True<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>False<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #008000">*/</span></span></div>
<a href="http://blog.csdn.net/wuchen_net/archive/2010/03/23/5409327.aspx"></a>
<img src ="http://www.cppblog.com/AutomateProgram/aggbug/124338.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/AutomateProgram/" target="_blank">漂漂</a> 2010-08-22 23:16 <a href="http://www.cppblog.com/AutomateProgram/archive/2010/08/22/124338.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>string 和stringbuilder的区别 </title><link>http://www.cppblog.com/AutomateProgram/archive/2010/08/22/124336.html</link><dc:creator>漂漂</dc:creator><author>漂漂</author><pubDate>Sun, 22 Aug 2010 15:14:00 GMT</pubDate><guid>http://www.cppblog.com/AutomateProgram/archive/2010/08/22/124336.html</guid><wfw:comment>http://www.cppblog.com/AutomateProgram/comments/124336.html</wfw:comment><comments>http://www.cppblog.com/AutomateProgram/archive/2010/08/22/124336.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/AutomateProgram/comments/commentRss/124336.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/AutomateProgram/services/trackbacks/124336.html</trackback:ping><description><![CDATA[原文地址：<a href="http://www.cnblogs.com/shangxijie/archive/2008/08/01/1258233.html">http://www.cnblogs.com/shangxijie/archive/2008/08/01/1258233.html</a><br>
<p>1.string 和　stringbuilder的区别：</p>
<p>String在任何语言中，都有它的特殊性，在.NET中也是如此。它属于基本数据类型，也是基本数据类型中唯一的引用类型。字符串可以声明为常量，但是它却放在了堆中。</p>
<p>一：不可改变对象 </p>
<p>在.NET中String是不可改变对象，一旦创建了一个String对象并为它赋值，它就不可能再改变，也就是你不可能改变一个字符串的值。这句话初听起来似乎有些不可思议，大家也许马上会想到字符串的连接操作，我们不也可以改变字符串吗？看下面这段代码：</p>
<p>&nbsp;1 using System;<br>&nbsp;2 <br>&nbsp;3 namespace Demo1<br>&nbsp;4&nbsp; {<br>&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ///&lt;summary&gt;<br>&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp; /// String连接测试<br>&nbsp;7&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br>&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp; public class Test<br>&nbsp;9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void Main(string[] args)<br>11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string a = "1234";<br>13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(a);<br>14 <br>15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a += "5678";<br>16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(a);<br>17&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.ReadLine();<br>18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>19&nbsp;&nbsp;&nbsp;&nbsp; }<br>20 }<br>21 <br>运行的结果：<br>&nbsp;1234<br>&nbsp;<br>&nbsp;12345678<br>&nbsp;<br>看起来我们似乎已经把MyStr的值从&#8220;1234&#8221;改为了&#8220;12345678&#8221;。事实是这样的吗？实际上并没有改变。在第5行代码中创建了一个String对象它的值是&#8220;1234&#8221;，MyStr指向了它在内存中的地址；第七行代码中创建了一个新的String对象它的值是&#8220;12345678&#8221;，MyStr指向了新的内存地址。这时在堆中其实存在着两个字符串对象，尽管我们只引用了它们中的一个，但是字符串&#8220;1234&#8221;仍然在内存中驻留。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>二：引用类型</p>
<p>前面说过String是引用类型，这就是如果我们创建很多个相同值的字符串对象，它在内存中的指向地址应该是一样的。也就是说，当我们创建了字符串对象a，它的值是&#8220;1234&#8221;，当我们再创建一个值为&#8220;1234&#8221;的字符串对象b时它不会再去分配一块内存空间，而是直接指向了a在内存中的地址。这样可以确保内存的有效利用。看下面的代码：</p>
<p>&nbsp;1 using System;<br>&nbsp;2 <br>&nbsp;3 namespace Demo2<br>&nbsp;4&nbsp; {<br>&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ///&lt;summary&gt;<br>&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp; /// String引用类型测试<br>&nbsp;7&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br>&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp; public class Test<br>&nbsp;9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void Main(string[] args)<br>11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string a = "1234";<br>13 <br>14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(a);<br>15 <br>16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Test.Change(a);<br>17 <br>18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(a);<br>19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.ReadLine();<br>20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>21 <br>22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void Change(string s)<br>23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s = "5678";<br>25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>26&nbsp;&nbsp;&nbsp;&nbsp; }<br>27 }</p>
<p>运行结果：<br>&nbsp;1234<br>&nbsp;<br>&nbsp;1234</p>
<p>做一个小改动，注意Change(ref string s)<br>&nbsp;1 using System;<br>&nbsp;2 <br>&nbsp;3 namespace Demo2<br>&nbsp;4&nbsp; {<br>&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br>&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp; /// String引用类型测试<br>&nbsp;7&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br>&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp; public class Test<br>&nbsp;9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void Main(string[] args)<br>11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string a = "1234";<br>13 <br>14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(a);<br>15 <br>16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Test.Change(ref a);<br>17 <br>18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(a);<br>19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.ReadLine();<br>20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>21 <br>22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void Change(ref string s)<br>23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s = "5678";<br>25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>26&nbsp;&nbsp;&nbsp;&nbsp; }<br>27 }<br>28 </p>
<p>运行结果：<br>&nbsp;1234 <br>&nbsp;5678</p>
<p>&nbsp;</p>
<p>三：StringBuilder对象<br>通过上面的分析可以看出，String类型在做字符串的连接操作时，效率是相当低的，并且由于每做一个连接操作，都会在内存中创建一个新的对象，占用了大量的内存空间。这样就引出StringBuilder对象，StringBuilder对象在做字符串连接操作时是在原来的字符串上进行修改，改善了性能。这一点我们平时使用中也许都知道，连接操作频繁的时候，使用StringBuilder对象。但是这两者之间的差别到底有多大呢？来做一个测试： </p>
<p>&nbsp;1 using System;<br>&nbsp;2 using System.Text;<br>&nbsp;3 <br>&nbsp;4 namespace Demo5<br>&nbsp;5&nbsp; {<br>&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ///&lt;summary&gt;<br>&nbsp;7&nbsp;&nbsp;&nbsp;&nbsp; /// String和StringBulider比较<br>&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br>&nbsp;9&nbsp;&nbsp;&nbsp;&nbsp; public class Test<br>10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void Main(string[] args)<br>12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string a = "";<br>14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringBuilder s = new StringBuilder();<br>15 <br>16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int times = 10000;<br>17&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int start,end;<br>18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ///测试String所用的时间<br>20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; start = Environment.TickCount;<br>21&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=0;i&lt;times;i++)<br>22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a += i.ToString();<br>24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end = Environment.TickCount;<br>26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine((end-start));<br>27&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>28&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ///测试StringBuilder所用的时间<br>29&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; start = Environment.TickCount;<br>30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=0;i&lt;times;i++)<br>31&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s.Append(i.ToString());<br>33&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>34&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end = Environment.TickCount;<br>35&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine((end-start));<br>36 <br>37&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.ReadLine();<br>38&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>39&nbsp;&nbsp;&nbsp;&nbsp; }<br>40 }<br>41 </p>
<p>运行结果：<br>&nbsp;884&nbsp;<br>&nbsp;0</p>
<p>通过上面的分析，可以看出用String来做字符串的连接时效率非常低，但并不是所任何情况下都要用StringBuilder，当我们连接很少的字符串时可以用String，但当做大量的或频繁的字符串连接操作时，就一定要用StringBuilder。</p>
<p><font style="BACKGROUND-COLOR: #c7edcc"></font>&nbsp;</p>
<img src ="http://www.cppblog.com/AutomateProgram/aggbug/124336.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/AutomateProgram/" target="_blank">漂漂</a> 2010-08-22 23:14 <a href="http://www.cppblog.com/AutomateProgram/archive/2010/08/22/124336.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C# 3.0 之 Partial Method 的使用</title><link>http://www.cppblog.com/AutomateProgram/archive/2010/08/22/124334.html</link><dc:creator>漂漂</dc:creator><author>漂漂</author><pubDate>Sun, 22 Aug 2010 15:12:00 GMT</pubDate><guid>http://www.cppblog.com/AutomateProgram/archive/2010/08/22/124334.html</guid><wfw:comment>http://www.cppblog.com/AutomateProgram/comments/124334.html</wfw:comment><comments>http://www.cppblog.com/AutomateProgram/archive/2010/08/22/124334.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/AutomateProgram/comments/commentRss/124334.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/AutomateProgram/services/trackbacks/124334.html</trackback:ping><description><![CDATA[原文地址：<a href="http://www.cnblogs.com/QinBaoBei/archive/2010/03/01/1675637.html">http://www.cnblogs.com/QinBaoBei/archive/2010/03/01/1675637.html</a><br><br>
<p><font face=微软雅黑 color=#000000 size=2>早在 C# 2.0 中，便出现了 Partial ，不过那是的 Partial 只能使用在类上，</font></p>
<p><font face=微软雅黑 color=#000000 size=2>也就是分部类，对于分部类，实用之处还是比较多的，</font></p>
<p><font face=微软雅黑 color=#000000 size=2>因为 Partial Method 是建立在 Partial Class 的基础之上的，</font></p>
<p><font face=微软雅黑 color=#000000 size=2>所以在这里先介绍一下 Partial Class 的使用，</font></p>
<p><font face=微软雅黑 color=#000000 size=2>然后再一并介绍 Partial Method ，</font></p>
<p><font face=微软雅黑 color=#000000 size=2>对于 Partial Class ，其实也就是将一个类拆分成几个分部类，</font></p>
<p><font face=微软雅黑 color=#000000 size=2>并且这些分部类可以写在不同的类文件 .cs 中，</font></p>
<p><font face=微软雅黑 color=#000000 size=2>比如在一个.cs 中写完这个 Class 的第一部分，</font></p>
<p><font face=微软雅黑 color=#000000 size=2>然后再在另外一个 .cs 中完成这个 Class 的第二部分，</font></p>
<p><font face=微软雅黑 color=#000000 size=2>再在另外一个 .cs 中完成这个 Class 的第三部分，</font></p>
<p><font face=微软雅黑 color=#000000 size=2>&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..</font></p>
<p><font face=微软雅黑 color=#000000 size=2>这个就是分部类了。</font></p>
<p><font face=微软雅黑 color=#000000 size=2>接下来看个示例便一清二楚了，</font></p>
<br>
<p><font face=微软雅黑 color=#000000 size=2>由上面的项目视图可以看出，我已经将一个类分成了四个部分，</font></p>
<p><font face=微软雅黑 color=#000000 size=2>然后再在 Demo__3 的 Code-Behind 中对这个类进行实例化并且访问，</font></p>
<p><font face=微软雅黑 color=#000000 size=2>先来看看各个 Partial Class 中的代码吧（非常简单的）</font></p>
<p><font face=微软雅黑 color=#000000 size=2><strong>这个是 Demo__3__Use__PartialMethodOne.cs</strong></font></p>
<p><font face=新宋体 color=#800080>public <strong>partial</strong> class Demo__3__Use__PartialMethod <br>{ <br>&nbsp;&nbsp;&nbsp; private string name = ""; </font></p>
<p><font face=新宋体 color=#800080>&nbsp;&nbsp;&nbsp; public void MethodOne() <br>&nbsp;&nbsp;&nbsp; { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name += "你来到了 MethodOne 方法&lt;br/&gt;"; <br>&nbsp;&nbsp;&nbsp; } </font></p>
<p><font face=新宋体 color=#800080>&nbsp;&nbsp;&nbsp; public string GetName() <br>&nbsp;&nbsp;&nbsp; { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MethodOne(); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MethodTwo(); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MethodThree(); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MethodFour(); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return name; <br>&nbsp;&nbsp;&nbsp; } <br>}</font></p>
<p><font face=微软雅黑 color=#000000 size=2><strong>这个是 Demo__3__Use__PartialMethodTwo.cs</strong></font></p>
<p><font face=新宋体 color=#800080>public <strong>partial</strong> class Demo__3__Use__PartialMethod <br>{ <br>&nbsp;&nbsp;&nbsp; public void MethodTwo() <br>&nbsp;&nbsp;&nbsp; { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name += "你来到了 MethodTwo 方法&lt;br/&gt;"; <br>&nbsp;&nbsp;&nbsp; } <br>}</font></p>
<p><font face=微软雅黑 color=#000000 size=2><strong>这个是 Demo__3__Use__PartialMethodThree.cs</strong></font></p>
<p><font face=新宋体 color=#800080>public <strong>partial</strong> class Demo__3__Use__PartialMethod <br>{ <br>&nbsp;&nbsp;&nbsp; public void MethodThree() <br>&nbsp;&nbsp;&nbsp; { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name += "你来到了 MethodThree 方法&lt;br/&gt;"; <br>&nbsp;&nbsp;&nbsp; } <br>}</font></p>
<p><font face=微软雅黑 color=#000000 size=2><strong>这个是 Demo__3__Use__PartialMethodFour.cs</strong></font></p>
<p><font face=新宋体 color=#800080>public <strong>partial</strong> class Demo__3__Use__PartialMethod <br>{ <br>&nbsp;&nbsp;&nbsp; public void MethodFour() <br>&nbsp;&nbsp;&nbsp; { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name += "你来到了 MethodFour 方法&lt;br/&gt;"; <br>&nbsp;&nbsp;&nbsp; } <br>}</font></p>
<p><font face=微软雅黑 color=#000000 size=2><strong>然后就只要看一下 Demo__3.aspx 的 Code-Behind 了</strong></font></p>
<p><font face=新宋体 color=#800080>using System; </font></p>
<p><font color=#800080><font face=新宋体>namespace CSharpLanguage <br>{ <br>&nbsp;&nbsp;&nbsp; public partial class Demo__3 : System.Web.UI.Page <br>&nbsp;&nbsp;&nbsp; { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; protected void Page_Load(object sender, EventArgs e) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br></font><font face=新宋体><font color=#ff00ff><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Demo__3__Use__PartialMethod partialMethod = <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new Demo__3__Use__PartialMethod();</strong></font> <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.Write(<font color=#ff00ff>partialMethod.GetName()</font>); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp; } <br>}</font></font></p>
<p><font face=微软雅黑 color=#000000 size=2>以上就是整个 Demo 的所有代码了，</font></p>
<p><font face=微软雅黑 color=#000000 size=2>再看一下使用 Partial Class 后的结果吧</font></p>
<p><font face=微软雅黑 color=#000000 size=2>完成了 Partial Class 的解释，那么便开始 Partial Method 了，</font></p>
<p><font face=微软雅黑 color=#000000 size=2>事实上，Partial Method 是完全依赖于 Partial Class 实现的，</font></p>
<p><font face=微软雅黑 color=#000000 size=2>Partial Method 也就是分部方法了，</font></p>
<p><font face=微软雅黑 color=#000000 size=2>分部方法也就是把一个完整的方法拆分成两个部分，</font></p>
<p><font face=微软雅黑 color=#000000 size=2>即方法的定义和方法的实现，</font></p>
<p><font face=微软雅黑 color=#000000 size=2>然后再进一步的就可以将这两个部分放在不同的.cs中了，</font></p>
<p><font face=微软雅黑 color=#000000 size=2>比如我有一个方法，</font></p>
<p><font face=微软雅黑 color=#000000 size=2>我在这个分部类中完成这个方法定义，</font></p>
<p><font face=微软雅黑 color=#000000 size=2>然后我又在另外的一个分部类中完成这个方法的实现，</font></p>
<p><font face=微软雅黑 color=#000000 size=2>这个就是分部方法了，</font></p>
<p><font face=微软雅黑 color=#000000 size=2>很明显的，分部方法时依赖于分部类的，</font></p>
<p><font face=微软雅黑 color=#000000 size=2>因为你必须在这个分部类中完成前面的方法定义，</font></p>
<p><font face=微软雅黑 color=#000000 size=2>再在另外的一个分部类中完成后面的方法实现，</font></p>
<p><font face=微软雅黑 color=#000000 size=2>所以，可以很明显的看出，没有 Partial Class 就不可能有 Partial Method ，</font></p>
<p><font face=微软雅黑 color=#000000 size=2>不过，从上面介绍 Partial Class 的例子中可以看出，</font></p>
<p><font face=微软雅黑 color=#000000 size=2>Partial Class 也是比较容易的，所以 Partial Method 也理所当然不会难了，</font></p>
<p><font face=微软雅黑 color=#000000 size=2><strong>Demo__4__Use__PartialOne.cs</strong></font></p>
<p><font face=新宋体 color=#800080>public <font color=#ff00ff><strong>partial</strong></font> class Demo__4__Use__Partial <br>{ <br>&nbsp;&nbsp;&nbsp; private string name = ""; <br>&nbsp;&nbsp;&nbsp; <strong><font color=#000080>partial</font></strong> void UseName(); <br>&nbsp;&nbsp;&nbsp; public string GetName() <br>&nbsp;&nbsp;&nbsp; { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UseName(); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return name; <br>&nbsp;&nbsp;&nbsp; } <br>}</font></p>
<p><font face=微软雅黑 color=#000000 size=2><strong>Demo__4__Use__PartialTwo.cs</strong></font></p>
<p><font face=新宋体 color=#800080>public <strong>partial</strong> class Demo__4__Use__Partial <br>{ <br>&nbsp;&nbsp;&nbsp; <strong><font color=#000080>partial</font></strong> void UseName() <br>&nbsp;&nbsp;&nbsp; { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name += "这里使用了 Partial Method 来操纵 name"; <br>&nbsp;&nbsp;&nbsp; } <br>}</font></p>
<p><strong><font face=微软雅黑 color=#000000 size=2>Demo__4.aspx 的 Code-Behind 中的代码</font></strong></p>
<p><font face=新宋体 color=#800080>using System; </font></p>
<p><font face=新宋体 color=#800080>namespace CSharpLanguage <br>{ <br>&nbsp;&nbsp;&nbsp; public partial class Demo__4 : System.Web.UI.Page <br>&nbsp;&nbsp;&nbsp; { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; protected void Page_Load(object sender, EventArgs e) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Demo__4__Use__Partial partialMethod = <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new Demo__4__Use__Partial(); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.Write(partialMethod.GetName()); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp; } <br>}</font></p>
<p><font face=微软雅黑 color=#000000 size=2>在看一下结果</font></p>
<p><font face=微软雅黑 color=#000000 size=2>上面虽然是完整的使用了一次 Partial Class 和 Partial Method ，</font></p>
<p><font face=微软雅黑 color=#000000 size=2>但是需要注意的是，使用 Partial Method 还是有诸多限制的，</font></p>
<p><font face=微软雅黑 color=#000000 size=2>首先是在声明 Partial Method 时，必须使用到关键字 Partial 来声明，</font></p>
<p><font face=微软雅黑 color=#000000 size=2>然后就是在使用 Partial Method 时，必须经 Partial Class 才能使用，</font></p>
<p><font face=微软雅黑 color=#000000 size=2>然后还有使用 Partial Method 时，其在类中的地位只能是 private ，</font></p>
<p><font face=微软雅黑 color=#000000 size=2>即是私有成员，在类外部是无法对 Partial Method 进行访问的，</font></p>
<p><font face=微软雅黑 color=#000000 size=2>还有很重要的一点就是 Partial Method 不能够有返回值，也就是只能为 void。</font></p>
<p><font face=微软雅黑 color=#000000 size=2></font></p>
<p><font face=微软雅黑 color=#000000 size=2></font></p>
<p><font face=微软雅黑 color=#000000 size=2></font></p>
<p><font face=微软雅黑 color=#000000 size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2010—2—01 </font></p>
<img src ="http://www.cppblog.com/AutomateProgram/aggbug/124334.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/AutomateProgram/" target="_blank">漂漂</a> 2010-08-22 23:12 <a href="http://www.cppblog.com/AutomateProgram/archive/2010/08/22/124334.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c#自定义简单链表通过IEnumerable接口实现内部迭代 </title><link>http://www.cppblog.com/AutomateProgram/archive/2010/08/22/124333.html</link><dc:creator>漂漂</dc:creator><author>漂漂</author><pubDate>Sun, 22 Aug 2010 15:08:00 GMT</pubDate><guid>http://www.cppblog.com/AutomateProgram/archive/2010/08/22/124333.html</guid><wfw:comment>http://www.cppblog.com/AutomateProgram/comments/124333.html</wfw:comment><comments>http://www.cppblog.com/AutomateProgram/archive/2010/08/22/124333.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/AutomateProgram/comments/commentRss/124333.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/AutomateProgram/services/trackbacks/124333.html</trackback:ping><description><![CDATA[原文地址：<a href="http://blog.csdn.net/lulu_jiang/archive/2010/06/04/5648098.aspx">http://blog.csdn.net/lulu_jiang/archive/2010/06/04/5648098.aspx</a><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_0_60_Open_Image onclick="this.style.display='none'; Codehighlighter1_0_60_Open_Text.style.display='none'; Codehighlighter1_0_60_Closed_Image.style.display='inline'; Codehighlighter1_0_60_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_0_60_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_60_Closed_Text.style.display='none'; Codehighlighter1_0_60_Open_Image.style.display='inline'; Codehighlighter1_0_60_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><span id=Codehighlighter1_0_60_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_0_60_Open_Text><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;summary&gt;</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;LinkedListNode&nbsp;自定义简单链表的节点定义<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;/summary&gt;</span><span style="COLOR: #808080"></span></span><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;LinkedListNode<br><img id=Codehighlighter1_89_607_Open_Image onclick="this.style.display='none'; Codehighlighter1_89_607_Open_Text.style.display='none'; Codehighlighter1_89_607_Closed_Image.style.display='inline'; Codehighlighter1_89_607_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_89_607_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_89_607_Closed_Text.style.display='none'; Codehighlighter1_89_607_Open_Image.style.display='inline'; Codehighlighter1_89_607_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_89_607_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_89_607_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">当前节点值</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">object</span><span style="COLOR: #000000">&nbsp;_value;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">object</span><span style="COLOR: #000000">&nbsp;Value<br><img id=Codehighlighter1_158_195_Open_Image onclick="this.style.display='none'; Codehighlighter1_158_195_Open_Text.style.display='none'; Codehighlighter1_158_195_Closed_Image.style.display='inline'; Codehighlighter1_158_195_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_158_195_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_158_195_Closed_Text.style.display='none'; Codehighlighter1_158_195_Open_Image.style.display='inline'; Codehighlighter1_158_195_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_158_195_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_158_195_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_172_189_Open_Image onclick="this.style.display='none'; Codehighlighter1_172_189_Open_Text.style.display='none'; Codehighlighter1_172_189_Closed_Image.style.display='inline'; Codehighlighter1_172_189_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_172_189_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_172_189_Closed_Text.style.display='none'; Codehighlighter1_172_189_Open_Image.style.display='inline'; Codehighlighter1_172_189_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">get</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_172_189_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_172_189_Open_Text><span style="COLOR: #000000">{&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;_value;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">构造函数</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;LinkedListNode(</span><span style="COLOR: #0000ff">object</span><span style="COLOR: #000000">&nbsp;value)<br><img id=Codehighlighter1_252_286_Open_Image onclick="this.style.display='none'; Codehighlighter1_252_286_Open_Text.style.display='none'; Codehighlighter1_252_286_Closed_Image.style.display='inline'; Codehighlighter1_252_286_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_252_286_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_252_286_Closed_Text.style.display='none'; Codehighlighter1_252_286_Open_Image.style.display='inline'; Codehighlighter1_252_286_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_252_286_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_252_286_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">._value&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;value;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">下一个节点</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;LinkedListNode&nbsp;_next;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;LinkedListNode&nbsp;Next<br><img id=Codehighlighter1_370_446_Open_Image onclick="this.style.display='none'; Codehighlighter1_370_446_Open_Text.style.display='none'; Codehighlighter1_370_446_Closed_Image.style.display='inline'; Codehighlighter1_370_446_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_370_446_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_370_446_Closed_Text.style.display='none'; Codehighlighter1_370_446_Open_Image.style.display='inline'; Codehighlighter1_370_446_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_370_446_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_370_446_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_384_400_Open_Image onclick="this.style.display='none'; Codehighlighter1_384_400_Open_Text.style.display='none'; Codehighlighter1_384_400_Closed_Image.style.display='inline'; Codehighlighter1_384_400_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_384_400_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_384_400_Closed_Text.style.display='none'; Codehighlighter1_384_400_Open_Image.style.display='inline'; Codehighlighter1_384_400_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">get</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_384_400_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_384_400_Open_Text><span style="COLOR: #000000">{&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;_next;&nbsp;}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_423_440_Open_Image onclick="this.style.display='none'; Codehighlighter1_423_440_Open_Text.style.display='none'; Codehighlighter1_423_440_Closed_Image.style.display='inline'; Codehighlighter1_423_440_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_423_440_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_423_440_Closed_Text.style.display='none'; Codehighlighter1_423_440_Open_Image.style.display='inline'; Codehighlighter1_423_440_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">internal</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">set</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_423_440_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_423_440_Open_Text><span style="COLOR: #000000">{&nbsp;_next&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;value;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">当前节点</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;LinkedListNode&nbsp;_prev;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;LinkedListNode&nbsp;Prev<br><img id=Codehighlighter1_529_605_Open_Image onclick="this.style.display='none'; Codehighlighter1_529_605_Open_Text.style.display='none'; Codehighlighter1_529_605_Closed_Image.style.display='inline'; Codehighlighter1_529_605_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_529_605_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_529_605_Closed_Text.style.display='none'; Codehighlighter1_529_605_Open_Image.style.display='inline'; Codehighlighter1_529_605_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_529_605_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_529_605_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_543_559_Open_Image onclick="this.style.display='none'; Codehighlighter1_543_559_Open_Text.style.display='none'; Codehighlighter1_543_559_Closed_Image.style.display='inline'; Codehighlighter1_543_559_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_543_559_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_543_559_Closed_Text.style.display='none'; Codehighlighter1_543_559_Open_Image.style.display='inline'; Codehighlighter1_543_559_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">get</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_543_559_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_543_559_Open_Text><span style="COLOR: #000000">{&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;_prev;&nbsp;}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_582_599_Open_Image onclick="this.style.display='none'; Codehighlighter1_582_599_Open_Text.style.display='none'; Codehighlighter1_582_599_Closed_Image.style.display='inline'; Codehighlighter1_582_599_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_582_599_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_582_599_Closed_Text.style.display='none'; Codehighlighter1_582_599_Open_Image.style.display='inline'; Codehighlighter1_582_599_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">internal</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">set</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_582_599_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_582_599_Open_Text><span style="COLOR: #000000">{&nbsp;_prev&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;value;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Collections;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_653_742_Open_Image onclick="this.style.display='none'; Codehighlighter1_653_742_Open_Text.style.display='none'; Codehighlighter1_653_742_Closed_Image.style.display='inline'; Codehighlighter1_653_742_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_653_742_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_653_742_Closed_Text.style.display='none'; Codehighlighter1_653_742_Open_Image.style.display='inline'; Codehighlighter1_653_742_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_653_742_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_653_742_Open_Text><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;summary&gt;</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;LinkedList&nbsp;自定义简单链表<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;为使自定义简单链表实现内部迭代，使之实现IEnumerable接口<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;/summary&gt;</span><span style="COLOR: #808080"></span></span><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;LinkedList:IEnumerable<br><img id=Codehighlighter1_779_1888_Open_Image onclick="this.style.display='none'; Codehighlighter1_779_1888_Open_Text.style.display='none'; Codehighlighter1_779_1888_Closed_Image.style.display='inline'; Codehighlighter1_779_1888_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_779_1888_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_779_1888_Closed_Text.style.display='none'; Codehighlighter1_779_1888_Open_Image.style.display='inline'; Codehighlighter1_779_1888_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_779_1888_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_779_1888_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">首节点</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;LinkedListNode&nbsp;_first;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;LinkedListNode&nbsp;First<br><img id=Codehighlighter1_862_899_Open_Image onclick="this.style.display='none'; Codehighlighter1_862_899_Open_Text.style.display='none'; Codehighlighter1_862_899_Closed_Image.style.display='inline'; Codehighlighter1_862_899_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_862_899_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_862_899_Closed_Text.style.display='none'; Codehighlighter1_862_899_Open_Image.style.display='inline'; Codehighlighter1_862_899_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_862_899_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_862_899_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_876_893_Open_Image onclick="this.style.display='none'; Codehighlighter1_876_893_Open_Text.style.display='none'; Codehighlighter1_876_893_Closed_Image.style.display='inline'; Codehighlighter1_876_893_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_876_893_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_876_893_Closed_Text.style.display='none'; Codehighlighter1_876_893_Open_Image.style.display='inline'; Codehighlighter1_876_893_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">get</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_876_893_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_876_893_Open_Text><span style="COLOR: #000000">{&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;_first;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">尾节点</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;LinkedListNode&nbsp;_last;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;LinkedListNode&nbsp;Last<br><img id=Codehighlighter1_981_1017_Open_Image onclick="this.style.display='none'; Codehighlighter1_981_1017_Open_Text.style.display='none'; Codehighlighter1_981_1017_Closed_Image.style.display='inline'; Codehighlighter1_981_1017_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_981_1017_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_981_1017_Closed_Text.style.display='none'; Codehighlighter1_981_1017_Open_Image.style.display='inline'; Codehighlighter1_981_1017_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_981_1017_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_981_1017_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_995_1011_Open_Image onclick="this.style.display='none'; Codehighlighter1_995_1011_Open_Text.style.display='none'; Codehighlighter1_995_1011_Closed_Image.style.display='inline'; Codehighlighter1_995_1011_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_995_1011_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_995_1011_Closed_Text.style.display='none'; Codehighlighter1_995_1011_Open_Image.style.display='inline'; Codehighlighter1_995_1011_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">get</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_995_1011_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_995_1011_Open_Text><span style="COLOR: #000000">{&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;_last;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">添加新节点</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;AddLast(</span><span style="COLOR: #0000ff">object</span><span style="COLOR: #000000">&nbsp;node)<br><img id=Codehighlighter1_1073_1341_Open_Image onclick="this.style.display='none'; Codehighlighter1_1073_1341_Open_Text.style.display='none'; Codehighlighter1_1073_1341_Closed_Image.style.display='inline'; Codehighlighter1_1073_1341_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1073_1341_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1073_1341_Closed_Text.style.display='none'; Codehighlighter1_1073_1341_Open_Image.style.display='inline'; Codehighlighter1_1073_1341_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1073_1341_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1073_1341_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LinkedListNode&nbsp;newNode&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;LinkedListNode(node);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(_first&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_1171_1239_Open_Image onclick="this.style.display='none'; Codehighlighter1_1171_1239_Open_Text.style.display='none'; Codehighlighter1_1171_1239_Closed_Image.style.display='inline'; Codehighlighter1_1171_1239_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1171_1239_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1171_1239_Closed_Text.style.display='none'; Codehighlighter1_1171_1239_Open_Image.style.display='inline'; Codehighlighter1_1171_1239_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1171_1239_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1171_1239_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_first&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;newNode;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_last&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;_first;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br><img id=Codehighlighter1_1262_1335_Open_Image onclick="this.style.display='none'; Codehighlighter1_1262_1335_Open_Text.style.display='none'; Codehighlighter1_1262_1335_Closed_Image.style.display='inline'; Codehighlighter1_1262_1335_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1262_1335_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1262_1335_Closed_Text.style.display='none'; Codehighlighter1_1262_1335_Open_Image.style.display='inline'; Codehighlighter1_1262_1335_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1262_1335_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1262_1335_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_last.Next&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;newNode;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_last&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;newNode;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">定义IEnumerable接口中的GetEnumerator方法</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;IEnumerator&nbsp;GetEnumerator()<br><img id=Codehighlighter1_1426_1886_Open_Image onclick="this.style.display='none'; Codehighlighter1_1426_1886_Open_Text.style.display='none'; Codehighlighter1_1426_1886_Closed_Image.style.display='inline'; Codehighlighter1_1426_1886_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1426_1886_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1426_1886_Closed_Text.style.display='none'; Codehighlighter1_1426_1886_Open_Image.style.display='inline'; Codehighlighter1_1426_1886_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1426_1886_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1426_1886_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LinkedListNode&nbsp;current&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;_first;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(current&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_1510_1880_Open_Image onclick="this.style.display='none'; Codehighlighter1_1510_1880_Open_Text.style.display='none'; Codehighlighter1_1510_1880_Closed_Image.style.display='inline'; Codehighlighter1_1510_1880_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1510_1880_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1510_1880_Closed_Text.style.display='none'; Codehighlighter1_1510_1880_Open_Image.style.display='inline'; Codehighlighter1_1510_1880_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1510_1880_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1510_1880_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yield&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;current.Value;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;current&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;current.Next;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">if&nbsp;(Convert.ToInt32(current.Value)&nbsp;==&nbsp;1)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;yield&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">停止迭代<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">}<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">else<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;yield&nbsp;return&nbsp;current.Value;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">返回集合的一个元素<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;current&nbsp;=&nbsp;current.Next;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">}</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_1900_1910_Open_Image onclick="this.style.display='none'; Codehighlighter1_1900_1910_Open_Text.style.display='none'; Codehighlighter1_1900_1910_Closed_Image.style.display='inline'; Codehighlighter1_1900_1910_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_1900_1910_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1900_1910_Closed_Text.style.display='none'; Codehighlighter1_1900_1910_Open_Image.style.display='inline'; Codehighlighter1_1900_1910_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1900_1910_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_1900_1910_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">&nbsp;调用^-^&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LinkedList&nbsp;list1&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;LinkedList();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list1.AddLast(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list1.AddLast(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">foreach</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000">&nbsp;list1)<br><img id=Codehighlighter1_2050_2102_Open_Image onclick="this.style.display='none'; Codehighlighter1_2050_2102_Open_Text.style.display='none'; Codehighlighter1_2050_2102_Closed_Image.style.display='inline'; Codehighlighter1_2050_2102_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_2050_2102_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2050_2102_Closed_Text.style.display='none'; Codehighlighter1_2050_2102_Open_Image.style.display='inline'; Codehighlighter1_2050_2102_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_2050_2102_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_2050_2102_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.Write(i.ToString());<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<img src ="http://www.cppblog.com/AutomateProgram/aggbug/124333.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/AutomateProgram/" target="_blank">漂漂</a> 2010-08-22 23:08 <a href="http://www.cppblog.com/AutomateProgram/archive/2010/08/22/124333.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C#中控件使用系列：listview用法</title><link>http://www.cppblog.com/AutomateProgram/archive/2010/08/22/124331.html</link><dc:creator>漂漂</dc:creator><author>漂漂</author><pubDate>Sun, 22 Aug 2010 14:59:00 GMT</pubDate><guid>http://www.cppblog.com/AutomateProgram/archive/2010/08/22/124331.html</guid><wfw:comment>http://www.cppblog.com/AutomateProgram/comments/124331.html</wfw:comment><comments>http://www.cppblog.com/AutomateProgram/archive/2010/08/22/124331.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/AutomateProgram/comments/commentRss/124331.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/AutomateProgram/services/trackbacks/124331.html</trackback:ping><description><![CDATA[<p>原文地址：<a href="http://www.cnblogs.com/gjs85/archive/2009/12/22/1629998.html">http://www.cnblogs.com/gjs85/archive/2009/12/22/1629998.html</a><br></p>
<p>在学校那会对listview这个控件就非常头疼，怎么都搞不好，每遇到这种事只能改用datagridview,后来这种事多了，没办法就在网上搜了一点东西结合着自己的理解，做了个测试：</p>
<p>添加listview控件到窗体中然后在load事件中添加代码，这是我的示例：</p>
<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;ForthForm_Load(</span><span style="COLOR: #0000ff">object</span><span style="COLOR: #000000">&nbsp;sender,&nbsp;EventArgs&nbsp;e)<br><img id=Codehighlighter1_64_463_Open_Image onclick="this.style.display='none'; Codehighlighter1_64_463_Open_Text.style.display='none'; Codehighlighter1_64_463_Closed_Image.style.display='inline'; Codehighlighter1_64_463_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_64_463_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_64_463_Closed_Text.style.display='none'; Codehighlighter1_64_463_Open_Image.style.display='inline'; Codehighlighter1_64_463_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_64_463_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_64_463_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lvorder.Columns.Add(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">编号</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">40</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lvorder.Columns.Add(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">号码</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">80</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lvorder.Columns.Add(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">充值金额</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">80</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lvorder.Columns.Add(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">状态</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">120</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lvorder.GridLines&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">显示表格线</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lvorder.View&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;View.Details;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">显示表格细节</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lvorder.HeaderStyle&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;ColumnHeaderStyle.Clickable;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">对表头进行设置</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lvorder.FullRowSelect&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">是否可以选择行</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<p>先为窗体设置listview的列数和表头，并规定每一列的宽度。</p>
<p>下面对数据进行添加，这一类的方法很多，先入为主，我用了listviewitem数组：</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">ListViewItem[]&nbsp;listViewItem&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;ListViewItem[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">];<br><img id=Codehighlighter1_115_150_Open_Image onclick="this.style.display='none'; Codehighlighter1_115_150_Open_Text.style.display='none'; Codehighlighter1_115_150_Closed_Image.style.display='inline'; Codehighlighter1_115_150_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_115_150_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_115_150_Closed_Text.style.display='none'; Codehighlighter1_115_150_Open_Image.style.display='inline'; Codehighlighter1_115_150_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listViewItem[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;ListViewItem(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">[]&nbsp;</span><span id=Codehighlighter1_115_150_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_115_150_Open_Text><span style="COLOR: #000000">{&nbsp;ormd,&nbsp;ormn,&nbsp;ormoney&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">元</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;state&nbsp;}</span></span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lvorder.Items.AddRange(listViewItem);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<p>这样一个简单的listview数据绑定就实现了</p>
<div id=c_jquery_test style="DISPLAY: none"></div>
<script type=text/javascript>
if ($ != jQuery) {
$ = jQuery.noConflict();
}
</script>
<img src ="http://www.cppblog.com/AutomateProgram/aggbug/124331.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/AutomateProgram/" target="_blank">漂漂</a> 2010-08-22 22:59 <a href="http://www.cppblog.com/AutomateProgram/archive/2010/08/22/124331.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c#中大致计算算法运行时间</title><link>http://www.cppblog.com/AutomateProgram/archive/2010/07/19/120754.html</link><dc:creator>漂漂</dc:creator><author>漂漂</author><pubDate>Mon, 19 Jul 2010 02:34:00 GMT</pubDate><guid>http://www.cppblog.com/AutomateProgram/archive/2010/07/19/120754.html</guid><wfw:comment>http://www.cppblog.com/AutomateProgram/comments/120754.html</wfw:comment><comments>http://www.cppblog.com/AutomateProgram/archive/2010/07/19/120754.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/AutomateProgram/comments/commentRss/120754.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/AutomateProgram/services/trackbacks/120754.html</trackback:ping><description><![CDATA[using System.Diagnostics; <br><br>private Stopwatch stw = new Stopwatch(); <br><br>stw.reset();<br>stw.start();<br><br>算法....<br>stw.stop();<br><br>String theTime =stw.ElapsedMilliseconds.ToString() + "ms";
<img src ="http://www.cppblog.com/AutomateProgram/aggbug/120754.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/AutomateProgram/" target="_blank">漂漂</a> 2010-07-19 10:34 <a href="http://www.cppblog.com/AutomateProgram/archive/2010/07/19/120754.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>