<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_木子博客</title><subtitle type="text">一个博客，一段文字；写给以后的自己...</subtitle><id>http://feed.cnblogs.com/blog/u/34625/rss</id><updated>2012-03-14T13:42:50Z</updated><author><name>木子博客</name><uri>http://www.cnblogs.com/moozi/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/moozi/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/34625/rss"/><entry><id>http://www.cnblogs.com/moozi/archive/2011/04/16/2018435.html</id><title type="text">多线程并发测试类库</title><summary type="text">WEB项目中除了单元测试，还经常需要多线程测试一个方法是否存在并发问题，或者是否有性能问题。每次都要写测试代码总是一件很累的事情。于是写了这一个多线程测试的类库，用来进行快速的多线程并发测试。</summary><published>2011-04-16T12:21:00Z</published><updated>2011-04-16T12:21:00Z</updated><author><name>木子博客</name><uri>http://www.cnblogs.com/moozi/</uri></author><link rel="alternate" href="http://www.cnblogs.com/moozi/archive/2011/04/16/2018435.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/moozi/archive/2011/04/16/2018435.html"/><content type="html">&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WEB项目中除了单元测试，还经常需要多线程测试一个方法是否存在并发问题，或者是否有性能问题。每次都要写测试代码总是一件很累的事情。于是写了这一个多线程测试的类库，用来进行快速的多线程并发测试。 &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 多线程并发测试时，需要等所有线程测试结束后通知主线程，主线程才能进行下一步动作，这里主要用到了&lt;span style="color: #ff0000"&gt;ManualResetEvent&lt;/span&gt;。ManualResetEvent 类表示一个本地等待处理事件，在已发事件信号后必须手动重置该事件。通常，此通信涉及一个线程在其他线程进行之前必须完成的任务。当一个线程开始一个活动（此活动必须完成后，其他线程才能开始）时，它调用 Reset 以将 ManualResetEvent 置于非终止状态。此线程可被视为控制 ManualResetEvent。调用 ManualResetEvent 上的 WaitOne 的线程将阻止，并等待信号。当控制线程完成活动时，它调用 Set 以发出等待线程可以继续进行的信号。并释放所有等待线程。一旦它被终止，ManualResetEvent 将保持终止状态，直到它被手动重置。即对 WaitOne 的调用将立即返回。可以通过将布尔值传递给构造函数来控制 ManualResetEvent 的初始状态，如果初始状态处于终止状态，为 true；否则为 false。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 多线程并发测试由以下步骤完成：&lt;/p&gt;&lt;ol&gt;&lt;li&gt;创建并发测试的线程数，先创建的线程等待最后一个线程创建完成。&lt;/li&gt;&lt;li&gt;所有线程执行待测试的方法，返回测试的结果。&lt;/li&gt;&lt;li&gt;等所有线程执行完成后，进入思考时间等待。&lt;/li&gt;&lt;li&gt;继续进行循环测试。 &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;我们来看这个多线程并发测试的代码。&lt;/p&gt;&lt;div&gt;&lt;div id="highlighter_46807" class="syntaxhighlighter  csharp ie"&gt;&lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;div class="line number1 index0 alt2"&gt;1&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;2&lt;/div&gt;&lt;div class="line number3 index2 alt2"&gt;3&lt;/div&gt;&lt;div class="line number4 index3 alt1"&gt;4&lt;/div&gt;&lt;div class="line number5 index4 alt2"&gt;5&lt;/div&gt;&lt;div class="line number6 index5 alt1"&gt;6&lt;/div&gt;&lt;div class="line number7 index6 alt2"&gt;7&lt;/div&gt;&lt;div class="line number8 index7 alt1"&gt;8&lt;/div&gt;&lt;div class="line number9 index8 alt2"&gt;9&lt;/div&gt;&lt;div class="line number10 index9 alt1"&gt;10&lt;/div&gt;&lt;div class="line number11 index10 alt2"&gt;11&lt;/div&gt;&lt;div class="line number12 index11 alt1"&gt;12&lt;/div&gt;&lt;div class="line number13 index12 alt2"&gt;13&lt;/div&gt;&lt;div class="line number14 index13 alt1"&gt;14&lt;/div&gt;&lt;div class="line number15 index14 alt2"&gt;15&lt;/div&gt;&lt;div class="line number16 index15 alt1"&gt;16&lt;/div&gt;&lt;div class="line number17 index16 alt2"&gt;17&lt;/div&gt;&lt;div class="line number18 index17 alt1"&gt;18&lt;/div&gt;&lt;div class="line number19 index18 alt2"&gt;19&lt;/div&gt;&lt;div class="line number20 index19 alt1"&gt;20&lt;/div&gt;&lt;div class="line number21 index20 alt2"&gt;21&lt;/div&gt;&lt;div class="line number22 index21 alt1"&gt;22&lt;/div&gt;&lt;div class="line number23 index22 alt2"&gt;23&lt;/div&gt;&lt;div class="line number24 index23 alt1"&gt;24&lt;/div&gt;&lt;div class="line number25 index24 alt2"&gt;25&lt;/div&gt;&lt;div class="line number26 index25 alt1"&gt;26&lt;/div&gt;&lt;div class="line number27 index26 alt2"&gt;27&lt;/div&gt;&lt;div class="line number28 index27 alt1"&gt;28&lt;/div&gt;&lt;div class="line number29 index28 alt2"&gt;29&lt;/div&gt;&lt;div class="line number30 index29 alt1"&gt;30&lt;/div&gt;&lt;div class="line number31 index30 alt2"&gt;31&lt;/div&gt;&lt;div class="line number32 index31 alt1"&gt;32&lt;/div&gt;&lt;div class="line number33 index32 alt2"&gt;33&lt;/div&gt;&lt;div class="line number34 index33 alt1"&gt;34&lt;/div&gt;&lt;div class="line number35 index34 alt2"&gt;35&lt;/div&gt;&lt;div class="line number36 index35 alt1"&gt;36&lt;/div&gt;&lt;div class="line number37 index36 alt2"&gt;37&lt;/div&gt;&lt;div class="line number38 index37 alt1"&gt;38&lt;/div&gt;&lt;div class="line number39 index38 alt2"&gt;39&lt;/div&gt;&lt;div class="line number40 index39 alt1"&gt;40&lt;/div&gt;&lt;div class="line number41 index40 alt2"&gt;41&lt;/div&gt;&lt;div class="line number42 index41 alt1"&gt;42&lt;/div&gt;&lt;div class="line number43 index42 alt2"&gt;43&lt;/div&gt;&lt;div class="line number44 index43 alt1"&gt;44&lt;/div&gt;&lt;div class="line number45 index44 alt2"&gt;45&lt;/div&gt;&lt;div class="line number46 index45 alt1"&gt;46&lt;/div&gt;&lt;div class="line number47 index46 alt2"&gt;47&lt;/div&gt;&lt;div class="line number48 index47 alt1"&gt;48&lt;/div&gt;&lt;div class="line number49 index48 alt2"&gt;49&lt;/div&gt;&lt;div class="line number50 index49 alt1"&gt;50&lt;/div&gt;&lt;div class="line number51 index50 alt2"&gt;51&lt;/div&gt;&lt;div class="line number52 index51 alt1"&gt;52&lt;/div&gt;&lt;div class="line number53 index52 alt2"&gt;53&lt;/div&gt;&lt;div class="line number54 index53 alt1"&gt;54&lt;/div&gt;&lt;div class="line number55 index54 alt2"&gt;55&lt;/div&gt;&lt;div class="line number56 index55 alt1"&gt;56&lt;/div&gt;&lt;div class="line number57 index56 alt2"&gt;57&lt;/div&gt;&lt;div class="line number58 index57 alt1"&gt;58&lt;/div&gt;&lt;div class="line number59 index58 alt2"&gt;59&lt;/div&gt;&lt;div class="line number60 index59 alt1"&gt;60&lt;/div&gt;&lt;div class="line number61 index60 alt2"&gt;61&lt;/div&gt;&lt;div class="line number62 index61 alt1"&gt;62&lt;/div&gt;&lt;div class="line number63 index62 alt2"&gt;63&lt;/div&gt;&lt;div class="line number64 index63 alt1"&gt;64&lt;/div&gt;&lt;div class="line number65 index64 alt2"&gt;65&lt;/div&gt;&lt;div class="line number66 index65 alt1"&gt;66&lt;/div&gt;&lt;div class="line number67 index66 alt2"&gt;67&lt;/div&gt;&lt;div class="line number68 index67 alt1"&gt;68&lt;/div&gt;&lt;div class="line number69 index68 alt2"&gt;69&lt;/div&gt;&lt;div class="line number70 index69 alt1"&gt;70&lt;/div&gt;&lt;div class="line number71 index70 alt2"&gt;71&lt;/div&gt;&lt;div class="line number72 index71 alt1"&gt;72&lt;/div&gt;&lt;div class="line number73 index72 alt2"&gt;73&lt;/div&gt;&lt;div class="line number74 index73 alt1"&gt;74&lt;/div&gt;&lt;div class="line number75 index74 alt2"&gt;75&lt;/div&gt;&lt;div class="line number76 index75 alt1"&gt;76&lt;/div&gt;&lt;div class="line number77 index76 alt2"&gt;77&lt;/div&gt;&lt;div class="line number78 index77 alt1"&gt;78&lt;/div&gt;&lt;div class="line number79 index78 alt2"&gt;79&lt;/div&gt;&lt;div class="line number80 index79 alt1"&gt;80&lt;/div&gt;&lt;div class="line number81 index80 alt2"&gt;81&lt;/div&gt;&lt;div class="line number82 index81 alt1"&gt;82&lt;/div&gt;&lt;div class="line number83 index82 alt2"&gt;83&lt;/div&gt;&lt;div class="line number84 index83 alt1"&gt;84&lt;/div&gt;&lt;div class="line number85 index84 alt2"&gt;85&lt;/div&gt;&lt;div class="line number86 index85 alt1"&gt;86&lt;/div&gt;&lt;div class="line number87 index86 alt2"&gt;87&lt;/div&gt;&lt;div class="line number88 index87 alt1"&gt;88&lt;/div&gt;&lt;div class="line number89 index88 alt2"&gt;89&lt;/div&gt;&lt;div class="line number90 index89 alt1"&gt;90&lt;/div&gt;&lt;div class="line number91 index90 alt2"&gt;91&lt;/div&gt;&lt;div class="line number92 index91 alt1"&gt;92&lt;/div&gt;&lt;div class="line number93 index92 alt2"&gt;93&lt;/div&gt;&lt;div class="line number94 index93 alt1"&gt;94&lt;/div&gt;&lt;div class="line number95 index94 alt2"&gt;95&lt;/div&gt;&lt;div class="line number96 index95 alt1"&gt;96&lt;/div&gt;&lt;div class="line number97 index96 alt2"&gt;97&lt;/div&gt;&lt;div class="line number98 index97 alt1"&gt;98&lt;/div&gt;&lt;div class="line number99 index98 alt2"&gt;99&lt;/div&gt;&lt;div class="line number100 index99 alt1"&gt;100&lt;/div&gt;&lt;div class="line number101 index100 alt2"&gt;101&lt;/div&gt;&lt;div class="line number102 index101 alt1"&gt;102&lt;/div&gt;&lt;div class="line number103 index102 alt2"&gt;103&lt;/div&gt;&lt;div class="line number104 index103 alt1"&gt;104&lt;/div&gt;&lt;div class="line number105 index104 alt2"&gt;105&lt;/div&gt;&lt;div class="line number106 index105 alt1"&gt;106&lt;/div&gt;&lt;div class="line number107 index106 alt2"&gt;107&lt;/div&gt;&lt;div class="line number108 index107 alt1"&gt;108&lt;/div&gt;&lt;div class="line number109 index108 alt2"&gt;109&lt;/div&gt;&lt;div class="line number110 index109 alt1"&gt;110&lt;/div&gt;&lt;div class="line number111 index110 alt2"&gt;111&lt;/div&gt;&lt;div class="line number112 index111 alt1"&gt;112&lt;/div&gt;&lt;div class="line number113 index112 alt2"&gt;113&lt;/div&gt;&lt;div class="line number114 index113 alt1"&gt;114&lt;/div&gt;&lt;div class="line number115 index114 alt2"&gt;115&lt;/div&gt;&lt;div class="line number116 index115 alt1"&gt;116&lt;/div&gt;&lt;div class="line number117 index116 alt2"&gt;117&lt;/div&gt;&lt;div class="line number118 index117 alt1"&gt;118&lt;/div&gt;&lt;div class="line number119 index118 alt2"&gt;119&lt;/div&gt;&lt;div class="line number120 index119 alt1"&gt;120&lt;/div&gt;&lt;div class="line number121 index120 alt2"&gt;121&lt;/div&gt;&lt;div class="line number122 index121 alt1"&gt;122&lt;/div&gt;&lt;div class="line number123 index122 alt2"&gt;123&lt;/div&gt;&lt;div class="line number124 index123 alt1"&gt;124&lt;/div&gt;&lt;div class="line number125 index124 alt2"&gt;125&lt;/div&gt;&lt;div class="line number126 index125 alt1"&gt;126&lt;/div&gt;&lt;div class="line number127 index126 alt2"&gt;127&lt;/div&gt;&lt;div class="line number128 index127 alt1"&gt;128&lt;/div&gt;&lt;div class="line number129 index128 alt2"&gt;129&lt;/div&gt;&lt;div class="line number130 index129 alt1"&gt;130&lt;/div&gt;&lt;div class="line number131 index130 alt2"&gt;131&lt;/div&gt;&lt;div class="line number132 index131 alt1"&gt;132&lt;/div&gt;&lt;div class="line number133 index132 alt2"&gt;133&lt;/div&gt;&lt;div class="line number134 index133 alt1"&gt;134&lt;/div&gt;&lt;div class="line number135 index134 alt2"&gt;135&lt;/div&gt;&lt;div class="line number136 index135 alt1"&gt;136&lt;/div&gt;&lt;div class="line number137 index136 alt2"&gt;137&lt;/div&gt;&lt;div class="line number138 index137 alt1"&gt;138&lt;/div&gt;&lt;div class="line number139 index138 alt2"&gt;139&lt;/div&gt;&lt;div class="line number140 index139 alt1"&gt;140&lt;/div&gt;&lt;div class="line number141 index140 alt2"&gt;141&lt;/div&gt;&lt;div class="line number142 index141 alt1"&gt;142&lt;/div&gt;&lt;div class="line number143 index142 alt2"&gt;143&lt;/div&gt;&lt;div class="line number144 index143 alt1"&gt;144&lt;/div&gt;&lt;div class="line number145 index144 alt2"&gt;145&lt;/div&gt;&lt;div class="line number146 index145 alt1"&gt;146&lt;/div&gt;&lt;div class="line number147 index146 alt2"&gt;147&lt;/div&gt;&lt;div class="line number148 index147 alt1"&gt;148&lt;/div&gt;&lt;div class="line number149 index148 alt2"&gt;149&lt;/div&gt;&lt;div class="line number150 index149 alt1"&gt;150&lt;/div&gt;&lt;div class="line number151 index150 alt2"&gt;151&lt;/div&gt;&lt;div class="line number152 index151 alt1"&gt;152&lt;/div&gt;&lt;div class="line number153 index152 alt2"&gt;153&lt;/div&gt;&lt;div class="line number154 index153 alt1"&gt;154&lt;/div&gt;&lt;div class="line number155 index154 alt2"&gt;155&lt;/div&gt;&lt;div class="line number156 index155 alt1"&gt;156&lt;/div&gt;&lt;div class="line number157 index156 alt2"&gt;157&lt;/div&gt;&lt;div class="line number158 index157 alt1"&gt;158&lt;/div&gt;&lt;div class="line number159 index158 alt2"&gt;159&lt;/div&gt;&lt;div class="line number160 index159 alt1"&gt;160&lt;/div&gt;&lt;div class="line number161 index160 alt2"&gt;161&lt;/div&gt;&lt;div class="line number162 index161 alt1"&gt;162&lt;/div&gt;&lt;div class="line number163 index162 alt2"&gt;163&lt;/div&gt;&lt;div class="line number164 index163 alt1"&gt;164&lt;/div&gt;&lt;div class="line number165 index164 alt2"&gt;165&lt;/div&gt;&lt;div class="line number166 index165 alt1"&gt;166&lt;/div&gt;&lt;div class="line number167 index166 alt2"&gt;167&lt;/div&gt;&lt;div class="line number168 index167 alt1"&gt;168&lt;/div&gt;&lt;div class="line number169 index168 alt2"&gt;169&lt;/div&gt;&lt;div class="line number170 index169 alt1"&gt;170&lt;/div&gt;&lt;div class="line number171 index170 alt2"&gt;171&lt;/div&gt;&lt;div class="line number172 index171 alt1"&gt;172&lt;/div&gt;&lt;div class="line number173 index172 alt2"&gt;173&lt;/div&gt;&lt;div class="line number174 index173 alt1"&gt;174&lt;/div&gt;&lt;div class="line number175 index174 alt2"&gt;175&lt;/div&gt;&lt;div class="line number176 index175 alt1"&gt;176&lt;/div&gt;&lt;div class="line number177 index176 alt2"&gt;177&lt;/div&gt;&lt;div class="line number178 index177 alt1"&gt;178&lt;/div&gt;&lt;div class="line number179 index178 alt2"&gt;179&lt;/div&gt;&lt;div class="line number180 index179 alt1"&gt;180&lt;/div&gt;&lt;div class="line number181 index180 alt2"&gt;181&lt;/div&gt;&lt;div class="line number182 index181 alt1"&gt;182&lt;/div&gt;&lt;div class="line number183 index182 alt2"&gt;183&lt;/div&gt;&lt;div class="line number184 index183 alt1"&gt;184&lt;/div&gt;&lt;div class="line number185 index184 alt2"&gt;185&lt;/div&gt;&lt;div class="line number186 index185 alt1"&gt;186&lt;/div&gt;&lt;div class="line number187 index186 alt2"&gt;187&lt;/div&gt;&lt;div class="line number188 index187 alt1"&gt;188&lt;/div&gt;&lt;div class="line number189 index188 alt2"&gt;189&lt;/div&gt;&lt;div class="line number190 index189 alt1"&gt;190&lt;/div&gt;&lt;div class="line number191 index190 alt2"&gt;191&lt;/div&gt;&lt;div class="line number192 index191 alt1"&gt;192&lt;/div&gt;&lt;div class="line number193 index192 alt2"&gt;193&lt;/div&gt;&lt;div class="line number194 index193 alt1"&gt;194&lt;/div&gt;&lt;div class="line number195 index194 alt2"&gt;195&lt;/div&gt;&lt;div class="line number196 index195 alt1"&gt;196&lt;/div&gt;&lt;div class="line number197 index196 alt2"&gt;197&lt;/div&gt;&lt;div class="line number198 index197 alt1"&gt;198&lt;/div&gt;&lt;div class="line number199 index198 alt2"&gt;199&lt;/div&gt;&lt;div class="line number200 index199 alt1"&gt;200&lt;/div&gt;&lt;div class="line number201 index200 alt2"&gt;201&lt;/div&gt;&lt;div class="line number202 index201 alt1"&gt;202&lt;/div&gt;&lt;div class="line number203 index202 alt2"&gt;203&lt;/div&gt;&lt;div class="line number204 index203 alt1"&gt;204&lt;/div&gt;&lt;div class="line number205 index204 alt2"&gt;205&lt;/div&gt;&lt;div class="line number206 index205 alt1"&gt;206&lt;/div&gt;&lt;div class="line number207 index206 alt2"&gt;207&lt;/div&gt;&lt;div class="line number208 index207 alt1"&gt;208&lt;/div&gt;&lt;div class="line number209 index208 alt2"&gt;209&lt;/div&gt;&lt;div class="line number210 index209 alt1"&gt;210&lt;/div&gt;&lt;div class="line number211 index210 alt2"&gt;211&lt;/div&gt;&lt;div class="line number212 index211 alt1"&gt;212&lt;/div&gt;&lt;div class="line number213 index212 alt2"&gt;213&lt;/div&gt;&lt;div class="line number214 index213 alt1"&gt;214&lt;/div&gt;&lt;div class="line number215 index214 alt2"&gt;215&lt;/div&gt;&lt;div class="line number216 index215 alt1"&gt;216&lt;/div&gt;&lt;div class="line number217 index216 alt2"&gt;217&lt;/div&gt;&lt;div class="line number218 index217 alt1"&gt;218&lt;/div&gt;&lt;div class="line number219 index218 alt2"&gt;219&lt;/div&gt;&lt;div class="line number220 index219 alt1"&gt;220&lt;/div&gt;&lt;div class="line number221 index220 alt2"&gt;221&lt;/div&gt;&lt;div class="line number222 index221 alt1"&gt;222&lt;/div&gt;&lt;div class="line number223 index222 alt2"&gt;223&lt;/div&gt;&lt;div class="line number224 index223 alt1"&gt;224&lt;/div&gt;&lt;div class="line number225 index224 alt2"&gt;225&lt;/div&gt;&lt;div class="line number226 index225 alt1"&gt;226&lt;/div&gt;&lt;div class="line number227 index226 alt2"&gt;227&lt;/div&gt;&lt;div class="line number228 index227 alt1"&gt;228&lt;/div&gt;&lt;div class="line number229 index228 alt2"&gt;229&lt;/div&gt;&lt;div class="line number230 index229 alt1"&gt;230&lt;/div&gt;&lt;div class="line number231 index230 alt2"&gt;231&lt;/div&gt;&lt;div class="line number232 index231 alt1"&gt;232&lt;/div&gt;&lt;div class="line number233 index232 alt2"&gt;233&lt;/div&gt;&lt;div class="line number234 index233 alt1"&gt;234&lt;/div&gt;&lt;div class="line number235 index234 alt2"&gt;235&lt;/div&gt;&lt;div class="line number236 index235 alt1"&gt;236&lt;/div&gt;&lt;div class="line number237 index236 alt2"&gt;237&lt;/div&gt;&lt;div class="line number238 index237 alt1"&gt;238&lt;/div&gt;&lt;div class="line number239 index238 alt2"&gt;239&lt;/div&gt;&lt;div class="line number240 index239 alt1"&gt;240&lt;/div&gt;&lt;div class="line number241 index240 alt2"&gt;241&lt;/div&gt;&lt;div class="line number242 index241 alt1"&gt;242&lt;/div&gt;&lt;div class="line number243 index242 alt2"&gt;243&lt;/div&gt;&lt;div class="line number244 index243 alt1"&gt;244&lt;/div&gt;&lt;div class="line number245 index244 alt2"&gt;245&lt;/div&gt;&lt;div class="line number246 index245 alt1"&gt;246&lt;/div&gt;&lt;div class="line number247 index246 alt2"&gt;247&lt;/div&gt;&lt;div class="line number248 index247 alt1"&gt;248&lt;/div&gt;&lt;div class="line number249 index248 alt2"&gt;249&lt;/div&gt;&lt;div class="line number250 index249 alt1"&gt;250&lt;/div&gt;&lt;div class="line number251 index250 alt2"&gt;251&lt;/div&gt;&lt;div class="line number252 index251 alt1"&gt;252&lt;/div&gt;&lt;div class="line number253 index252 alt2"&gt;253&lt;/div&gt;&lt;div class="line number254 index253 alt1"&gt;254&lt;/div&gt;&lt;div class="line number255 index254 alt2"&gt;255&lt;/div&gt;&lt;div class="line number256 index255 alt1"&gt;256&lt;/div&gt;&lt;div class="line number257 index256 alt2"&gt;257&lt;/div&gt;&lt;div class="line number258 index257 alt1"&gt;258&lt;/div&gt;&lt;div class="line number259 index258 alt2"&gt;259&lt;/div&gt;&lt;div class="line number260 index259 alt1"&gt;260&lt;/div&gt;&lt;div class="line number261 index260 alt2"&gt;261&lt;/div&gt;&lt;div class="line number262 index261 alt1"&gt;262&lt;/div&gt;&lt;div class="line number263 index262 alt2"&gt;263&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="container"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;using&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;System; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;using&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;System.Collections.Generic; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number3 index2 alt2"&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;using&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;System.Diagnostics; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number4 index3 alt1"&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;using&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;System.Threading; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number5 index4 alt2"&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number6 index5 alt1"&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// 并发测试 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number7 index6 alt2"&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;/summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number8 index7 alt1"&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;class&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;ConcurrentTest : IDisposable &lt;/code&gt;&lt;/div&gt;&lt;div class="line number9 index8 alt2"&gt;&lt;code class="csharp plain"&gt;{ &lt;/code&gt;&lt;/div&gt;&lt;div class="line number10 index9 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp preprocessor"&gt;&lt;font color="#808080"&gt;#region 私有方法 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number11 index10 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number12 index11 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// 测试方法所在的接口 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number13 index12 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;/summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number14 index13 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;private&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;Func&amp;lt;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;bool&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;&amp;gt; func; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number15 index14 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number16 index15 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// 主线程控制信号 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number17 index16 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;/summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number18 index17 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;private&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;ManualResetEvent manualResetEvent; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number19 index18 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number20 index19 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// 测试线程控制信号 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number21 index20 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;/summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number22 index21 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;private&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;ManualResetEvent threadResetEvent; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number23 index22 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number24 index23 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// 待执行的线程数 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number25 index24 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;/summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number26 index25 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;private&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;List&amp;lt;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;int&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;&amp;gt; threads; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number27 index26 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number28 index27 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// 测试结果 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number29 index28 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;/summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number30 index29 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;private&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;List&amp;lt;ConcurrentTestResult&amp;gt; results; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number31 index30 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number32 index31 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// 执行测试的成功数 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number33 index32 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;/summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number34 index33 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;private&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;int&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;successCount; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number35 index34 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number36 index35 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// 执行测试的失败数 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number37 index36 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;/summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number38 index37 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;private&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;int&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;failureCount; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number39 index38 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number40 index39 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// 测试耗时 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number41 index40 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;/summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number42 index41 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;private&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;long&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;elapsedMilliseconds; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number43 index42 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number44 index43 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// 当前线程 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number45 index44 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;/summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number46 index45 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;private&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;int&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;currentIndex; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number47 index46 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number48 index47 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// 当前测试的总线程数 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number49 index48 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;/summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number50 index49 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;private&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;int&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;currentCount; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number51 index50 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number52 index51 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// 思考时间 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number53 index52 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;/summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number54 index53 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;private&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;int&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;thinkTime; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number55 index54 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number56 index55 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// 重复次数 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number57 index56 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;/summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number58 index57 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;private&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;int&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;repeatCount; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number59 index58 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number60 index59 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// 测试计时器 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number61 index60 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;/summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number62 index61 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;private&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;Stopwatch stopwatch; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number63 index62 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp preprocessor"&gt;&lt;font color="#808080"&gt;#endregion &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number64 index63 alt1"&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="line number65 index64 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp preprocessor"&gt;&lt;font color="#808080"&gt;#region 构造函数 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number66 index65 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number67 index66 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// 构造函数 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number68 index67 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;/summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number69 index68 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;ConcurrentTest() &lt;/code&gt;&lt;/div&gt;&lt;div class="line number70 index69 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;{ &lt;/code&gt;&lt;/div&gt;&lt;div class="line number71 index70 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;manualResetEvent = &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;new&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;ManualResetEvent(&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;true&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number72 index71 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;threadResetEvent = &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;new&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;ManualResetEvent(&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;true&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number73 index72 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;stopwatch = &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;new&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;Stopwatch(); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number74 index73 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;} &lt;/code&gt;&lt;/div&gt;&lt;div class="line number75 index74 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp preprocessor"&gt;&lt;font color="#808080"&gt;#endregion &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number76 index75 alt1"&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="line number77 index76 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp preprocessor"&gt;&lt;font color="#808080"&gt;#region 执行测试 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number78 index77 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number79 index78 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// 执行多线程测试 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number80 index79 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;/summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number81 index80 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;param name="threadCount"&amp;gt;需要测试的线程数&amp;lt;/param&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number82 index81 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;param name="func"&amp;gt;待执行方法&amp;lt;/param&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number83 index82 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number84 index83 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;List&amp;lt;ConcurrentTestResult&amp;gt; Execute(&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;int&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;threadCount, Func&amp;lt;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;bool&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;&amp;gt; func) &lt;/code&gt;&lt;/div&gt;&lt;div class="line number85 index84 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;{ &lt;/code&gt;&lt;/div&gt;&lt;div class="line number86 index85 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;return&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;Execute(threadCount, 1, func); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number87 index86 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;} &lt;/code&gt;&lt;/div&gt;&lt;div class="line number88 index87 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number89 index88 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// 执行多线程测试 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number90 index89 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;/summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number91 index90 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;param name="threadCount"&amp;gt;需要测试的线程数&amp;lt;/param&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number92 index91 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;param name="repeatCount"&amp;gt;重复次数&amp;lt;/param&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number93 index92 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;param name="func"&amp;gt;待执行方法&amp;lt;/param&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number94 index93 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number95 index94 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;List&amp;lt;ConcurrentTestResult&amp;gt; Execute(&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;int&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;threadCount, &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;int&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;repeatCount, Func&amp;lt;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;bool&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;&amp;gt; func) &lt;/code&gt;&lt;/div&gt;&lt;div class="line number96 index95 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;{ &lt;/code&gt;&lt;/div&gt;&lt;div class="line number97 index96 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;return&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;Execute(threadCount, 0, repeatCount, func); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number98 index97 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;} &lt;/code&gt;&lt;/div&gt;&lt;div class="line number99 index98 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number100 index99 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// 执行多线程测试 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number101 index100 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;/summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number102 index101 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;param name="threadCount"&amp;gt;需要测试的线程数&amp;lt;/param&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number103 index102 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;param name="thinkTime"&amp;gt;思考时间，单位耗秒&amp;lt;/param&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number104 index103 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;param name="repeatCount"&amp;gt;重复次数&amp;lt;/param&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number105 index104 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;param name="func"&amp;gt;待执行方法&amp;lt;/param&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number106 index105 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number107 index106 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;List&amp;lt;ConcurrentTestResult&amp;gt; Execute(&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;int&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;threadCount, &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;int&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;thinkTime, &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;int&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;repeatCount, Func&amp;lt;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;bool&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;&amp;gt; func) &lt;/code&gt;&lt;/div&gt;&lt;div class="line number108 index107 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;{ &lt;/code&gt;&lt;/div&gt;&lt;div class="line number109 index108 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;return&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;Execute(&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;new&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;List&amp;lt;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;int&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;&amp;gt;() { threadCount }, thinkTime, repeatCount, func); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number110 index109 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;} &lt;/code&gt;&lt;/div&gt;&lt;div class="line number111 index110 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number112 index111 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// 执行多线程测试 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number113 index112 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;/summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number114 index113 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;param name="threads"&amp;gt;分别需要测试的线程数&amp;lt;/param&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number115 index114 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;param name="thinkTime"&amp;gt;思考时间，单位耗秒&amp;lt;/param&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number116 index115 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;param name="repeatCount"&amp;gt;重复次数&amp;lt;/param&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number117 index116 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;param name="func"&amp;gt;待执行方法&amp;lt;/param&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number118 index117 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number119 index118 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;List&amp;lt;ConcurrentTestResult&amp;gt; Execute(List&amp;lt;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;int&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;&amp;gt; threads, &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;int&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;thinkTime, &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;int&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;repeatCount, Func&amp;lt;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;bool&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;&amp;gt; func) &lt;/code&gt;&lt;/div&gt;&lt;div class="line number120 index119 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;{ &lt;/code&gt;&lt;/div&gt;&lt;div class="line number121 index120 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;this&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;.func = func; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number122 index121 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;this&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;.threads = threads; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number123 index122 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;this&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;.thinkTime = thinkTime; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number124 index123 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;this&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;.repeatCount = repeatCount; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number125 index124 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;CheckParameters(); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number126 index125 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;CreateMultiThread(); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number127 index126 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;return&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;this&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;.results; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number128 index127 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;} &lt;/code&gt;&lt;/div&gt;&lt;div class="line number129 index128 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp preprocessor"&gt;&lt;font color="#808080"&gt;#endregion &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number130 index129 alt1"&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="line number131 index130 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp preprocessor"&gt;&lt;font color="#808080"&gt;#region 验证参数 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number132 index131 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number133 index132 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// 验证参数 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number134 index133 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;/summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number135 index134 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;private&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;void&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;CheckParameters() &lt;/code&gt;&lt;/div&gt;&lt;div class="line number136 index135 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;{ &lt;/code&gt;&lt;/div&gt;&lt;div class="line number137 index136 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;if&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;(func == &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;null&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;) &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;throw&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;new&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;ArgumentNullException(&lt;/code&gt;&lt;code class="csharp string"&gt;&lt;font color="#0000ff"&gt;"func不能为空"&lt;/font&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number138 index137 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;if&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;(threads == &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;null&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;|| threads.Count == 0) &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;throw&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;new&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;ArgumentNullException(&lt;/code&gt;&lt;code class="csharp string"&gt;&lt;font color="#0000ff"&gt;"threads不能为空或者长度不能为0"&lt;/font&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number139 index138 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;if&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;(thinkTime &amp;lt; 0) &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;throw&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;new&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;Exception(&lt;/code&gt;&lt;code class="csharp string"&gt;&lt;font color="#0000ff"&gt;"thinkTime不能小于0"&lt;/font&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number140 index139 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;if&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;(repeatCount &amp;lt;= 0) &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;throw&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;new&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;Exception(&lt;/code&gt;&lt;code class="csharp string"&gt;&lt;font color="#0000ff"&gt;"repeatCount不能小于等于0"&lt;/font&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number141 index140 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;} &lt;/code&gt;&lt;/div&gt;&lt;div class="line number142 index141 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp preprocessor"&gt;&lt;font color="#808080"&gt;#endregion &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number143 index142 alt2"&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="line number144 index143 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp preprocessor"&gt;&lt;font color="#808080"&gt;#region 创建多线程并执行测试 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number145 index144 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number146 index145 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// 创建多线程进行测试 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number147 index146 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;/summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number148 index147 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;private&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;void&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;CreateMultiThread() &lt;/code&gt;&lt;/div&gt;&lt;div class="line number149 index148 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;{ &lt;/code&gt;&lt;/div&gt;&lt;div class="line number150 index149 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;results = &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;new&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;List&amp;lt;ConcurrentTestResult&amp;gt;(threads.Count); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number151 index150 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;foreach&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;(&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;int&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;threadCount &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;in&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;threads) &lt;/code&gt;&lt;/div&gt;&lt;div class="line number152 index151 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;{ &lt;/code&gt;&lt;/div&gt;&lt;div class="line number153 index152 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;for&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;(&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;int&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;repeat = 0; repeat &amp;lt; repeatCount; repeat++) &lt;/code&gt;&lt;/div&gt;&lt;div class="line number154 index153 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;{ &lt;/code&gt;&lt;/div&gt;&lt;div class="line number155 index154 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp comments"&gt;&lt;font color="#008200"&gt;//主线程进入阻止状态 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number156 index155 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;manualResetEvent.Reset(); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number157 index156 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp comments"&gt;&lt;font color="#008200"&gt;//测试线程进入阻止状态 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number158 index157 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;threadResetEvent.Reset(); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number159 index158 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;stopwatch.Reset(); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number160 index159 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;currentCount = threadCount; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number161 index160 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;currentIndex = 0; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number162 index161 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;successCount = 0; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number163 index162 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;failureCount = 0; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number164 index163 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;elapsedMilliseconds = 0; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number165 index164 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;for&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;(&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;int&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;i = 0; i &amp;lt; currentCount; i++) &lt;/code&gt;&lt;/div&gt;&lt;div class="line number166 index165 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;{ &lt;/code&gt;&lt;/div&gt;&lt;div class="line number167 index166 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;Thread t = &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;new&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;Thread(&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;new&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;ThreadStart(DoWork)); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number168 index167 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;t.Start(); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number169 index168 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;} &lt;/code&gt;&lt;/div&gt;&lt;div class="line number170 index169 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp comments"&gt;&lt;font color="#008200"&gt;//阻止主线程，等待测试线程完成测试 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number171 index170 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;manualResetEvent.WaitOne(); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number172 index171 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;results.Add(&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;new&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;ConcurrentTestResult() &lt;/code&gt;&lt;/div&gt;&lt;div class="line number173 index172 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;{ &lt;/code&gt;&lt;/div&gt;&lt;div class="line number174 index173 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;FailureCount = failureCount, &lt;/code&gt;&lt;/div&gt;&lt;div class="line number175 index174 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;SuccessCount = successCount, &lt;/code&gt;&lt;/div&gt;&lt;div class="line number176 index175 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;ElapsedMilliseconds = elapsedMilliseconds &lt;/code&gt;&lt;/div&gt;&lt;div class="line number177 index176 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;}); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number178 index177 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;Thread.Sleep(thinkTime); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number179 index178 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;} &lt;/code&gt;&lt;/div&gt;&lt;div class="line number180 index179 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;} &lt;/code&gt;&lt;/div&gt;&lt;div class="line number181 index180 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;} &lt;/code&gt;&lt;/div&gt;&lt;div class="line number182 index181 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number183 index182 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// 执行测试方法 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number184 index183 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;/summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number185 index184 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;private&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;void&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;DoWork() &lt;/code&gt;&lt;/div&gt;&lt;div class="line number186 index185 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;{ &lt;/code&gt;&lt;/div&gt;&lt;div class="line number187 index186 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;bool&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;executeResult; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number188 index187 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;Interlocked.Increment(&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;ref&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;currentIndex); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number189 index188 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;if&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;(currentIndex &amp;lt; currentCount) &lt;/code&gt;&lt;/div&gt;&lt;div class="line number190 index189 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;{ &lt;/code&gt;&lt;/div&gt;&lt;div class="line number191 index190 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp comments"&gt;&lt;font color="#008200"&gt;//等待所有线程创建完毕后同时执行测试 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number192 index191 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;threadResetEvent.WaitOne(); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number193 index192 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;} &lt;/code&gt;&lt;/div&gt;&lt;div class="line number194 index193 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;else&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number195 index194 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;{ &lt;/code&gt;&lt;/div&gt;&lt;div class="line number196 index195 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp comments"&gt;&lt;font color="#008200"&gt;//最后一个线程创建完成，通知所有线程，开始执行测试 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number197 index196 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;threadResetEvent.Set(); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number198 index197 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp comments"&gt;&lt;font color="#008200"&gt;//开始计时 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number199 index198 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;stopwatch.Start(); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number200 index199 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;} &lt;/code&gt;&lt;/div&gt;&lt;div class="line number201 index200 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp comments"&gt;&lt;font color="#008200"&gt;//执行测试 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number202 index201 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;executeResult = func(); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number203 index202 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;Interlocked.Decrement(&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;ref&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;currentIndex); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number204 index203 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;if&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;(currentIndex == 0) &lt;/code&gt;&lt;/div&gt;&lt;div class="line number205 index204 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;{ &lt;/code&gt;&lt;/div&gt;&lt;div class="line number206 index205 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp comments"&gt;&lt;font color="#008200"&gt;//最后一个线程执行的测试结束，结束计时 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number207 index206 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;stopwatch.Stop(); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number208 index207 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;elapsedMilliseconds = stopwatch.ElapsedMilliseconds; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number209 index208 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp comments"&gt;&lt;font color="#008200"&gt;//保存测试结果 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number210 index209 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;if&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;(executeResult) &lt;/code&gt;&lt;/div&gt;&lt;div class="line number211 index210 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;Interlocked.Increment(&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;ref&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;successCount); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number212 index211 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;else&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number213 index212 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;Interlocked.Increment(&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;ref&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;failureCount); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number214 index213 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp comments"&gt;&lt;font color="#008200"&gt;//通知主线程继续 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number215 index214 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;manualResetEvent.Set(); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number216 index215 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;} &lt;/code&gt;&lt;/div&gt;&lt;div class="line number217 index216 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;else&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number218 index217 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;{ &lt;/code&gt;&lt;/div&gt;&lt;div class="line number219 index218 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp comments"&gt;&lt;font color="#008200"&gt;//保存测试结果 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number220 index219 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;if&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;(executeResult) &lt;/code&gt;&lt;/div&gt;&lt;div class="line number221 index220 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;Interlocked.Increment(&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;ref&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;successCount); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number222 index221 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;else&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number223 index222 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;Interlocked.Increment(&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;ref&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;failureCount); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number224 index223 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;} &lt;/code&gt;&lt;/div&gt;&lt;div class="line number225 index224 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;} &lt;/code&gt;&lt;/div&gt;&lt;div class="line number226 index225 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp preprocessor"&gt;&lt;font color="#808080"&gt;#endregion &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number227 index226 alt2"&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="line number228 index227 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp preprocessor"&gt;&lt;font color="#808080"&gt;#region 释放资源 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number229 index228 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number230 index229 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// 释放资源 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number231 index230 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;/summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number232 index231 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;void&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;Dispose() &lt;/code&gt;&lt;/div&gt;&lt;div class="line number233 index232 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;{ &lt;/code&gt;&lt;/div&gt;&lt;div class="line number234 index233 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;manualResetEvent.Close(); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number235 index234 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;threadResetEvent.Close(); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number236 index235 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;} &lt;/code&gt;&lt;/div&gt;&lt;div class="line number237 index236 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp preprocessor"&gt;&lt;font color="#808080"&gt;#endregion &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number238 index237 alt1"&gt;&lt;code class="csharp plain"&gt;} &lt;/code&gt;&lt;/div&gt;&lt;div class="line number239 index238 alt2"&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number240 index239 alt1"&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// 并发测试结果 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number241 index240 alt2"&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;/summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number242 index241 alt1"&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;class&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;ConcurrentTestResult &lt;/code&gt;&lt;/div&gt;&lt;div class="line number243 index242 alt2"&gt;&lt;code class="csharp plain"&gt;{ &lt;/code&gt;&lt;/div&gt;&lt;div class="line number244 index243 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number245 index244 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// 当前执行线程总数 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number246 index245 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;/summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number247 index246 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;int&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;ThreadCount &lt;/code&gt;&lt;/div&gt;&lt;div class="line number248 index247 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;{ &lt;/code&gt;&lt;/div&gt;&lt;div class="line number249 index248 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;get&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;{ &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;return&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;SuccessCount + FailureCount; } &lt;/code&gt;&lt;/div&gt;&lt;div class="line number250 index249 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;} &lt;/code&gt;&lt;/div&gt;&lt;div class="line number251 index250 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number252 index251 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// 测试成功数 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number253 index252 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;/summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number254 index253 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;int&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;SuccessCount { &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;get&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;; &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;set&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;; } &lt;/code&gt;&lt;/div&gt;&lt;div class="line number255 index254 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number256 index255 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// 测试失败数 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number257 index256 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;/summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number258 index257 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;int&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;FailureCount { &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;get&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;; &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;set&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;; } &lt;/code&gt;&lt;/div&gt;&lt;div class="line number259 index258 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number260 index259 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// 总耗时 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number261 index260 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp color1"&gt;&lt;font color="#808080"&gt;/// &amp;lt;/summary&amp;gt; &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number262 index261 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;long&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;ElapsedMilliseconds { &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;get&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;; &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;set&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;; } &lt;/code&gt;&lt;/div&gt;&lt;div class="line number263 index262 alt2"&gt;&lt;code class="csharp plain"&gt;}&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 使用起来就非常简单了，我们看测试代码：&lt;/p&gt;&lt;div&gt;&lt;div id="highlighter_578714" class="syntaxhighlighter  csharp ie"&gt;&lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;div class="line number1 index0 alt2"&gt;1&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;2&lt;/div&gt;&lt;div class="line number3 index2 alt2"&gt;3&lt;/div&gt;&lt;div class="line number4 index3 alt1"&gt;4&lt;/div&gt;&lt;div class="line number5 index4 alt2"&gt;5&lt;/div&gt;&lt;div class="line number6 index5 alt1"&gt;6&lt;/div&gt;&lt;div class="line number7 index6 alt2"&gt;7&lt;/div&gt;&lt;div class="line number8 index7 alt1"&gt;8&lt;/div&gt;&lt;div class="line number9 index8 alt2"&gt;9&lt;/div&gt;&lt;div class="line number10 index9 alt1"&gt;10&lt;/div&gt;&lt;div class="line number11 index10 alt2"&gt;11&lt;/div&gt;&lt;div class="line number12 index11 alt1"&gt;12&lt;/div&gt;&lt;div class="line number13 index12 alt2"&gt;13&lt;/div&gt;&lt;div class="line number14 index13 alt1"&gt;14&lt;/div&gt;&lt;div class="line number15 index14 alt2"&gt;15&lt;/div&gt;&lt;div class="line number16 index15 alt1"&gt;16&lt;/div&gt;&lt;div class="line number17 index16 alt2"&gt;17&lt;/div&gt;&lt;div class="line number18 index17 alt1"&gt;18&lt;/div&gt;&lt;div class="line number19 index18 alt2"&gt;19&lt;/div&gt;&lt;div class="line number20 index19 alt1"&gt;20&lt;/div&gt;&lt;div class="line number21 index20 alt2"&gt;21&lt;/div&gt;&lt;div class="line number22 index21 alt1"&gt;22&lt;/div&gt;&lt;div class="line number23 index22 alt2"&gt;23&lt;/div&gt;&lt;div class="line number24 index23 alt1"&gt;24&lt;/div&gt;&lt;div class="line number25 index24 alt2"&gt;25&lt;/div&gt;&lt;div class="line number26 index25 alt1"&gt;26&lt;/div&gt;&lt;div class="line number27 index26 alt2"&gt;27&lt;/div&gt;&lt;div class="line number28 index27 alt1"&gt;28&lt;/div&gt;&lt;div class="line number29 index28 alt2"&gt;29&lt;/div&gt;&lt;div class="line number30 index29 alt1"&gt;30&lt;/div&gt;&lt;div class="line number31 index30 alt2"&gt;31&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="container"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;class&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;Program &lt;/code&gt;&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;&lt;code class="csharp plain"&gt;{ &lt;/code&gt;&lt;/div&gt;&lt;div class="line number3 index2 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;static&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;void&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;Main(&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;string&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;[] args) &lt;/code&gt;&lt;/div&gt;&lt;div class="line number4 index3 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;{ &lt;/code&gt;&lt;/div&gt;&lt;div class="line number5 index4 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;using&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;(ConcurrentTest concurrentTest = &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;new&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;ConcurrentTest()) &lt;/code&gt;&lt;/div&gt;&lt;div class="line number6 index5 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;{ &lt;/code&gt;&lt;/div&gt;&lt;div class="line number7 index6 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;var result = concurrentTest.Execute(5, -1, 10, &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;new&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;TestClass().Execute); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number8 index7 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;foreach&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;(var item &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;in&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;result) &lt;/code&gt;&lt;/div&gt;&lt;div class="line number9 index8 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;{ &lt;/code&gt;&lt;/div&gt;&lt;div class="line number10 index9 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;Console.WriteLine(&lt;/code&gt;&lt;code class="csharp string"&gt;&lt;font color="#0000ff"&gt;"线程数：{0}\t成功：{1}\t失败：{2}\t耗时：{3}"&lt;/font&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;, &lt;/code&gt;&lt;/div&gt;&lt;div class="line number11 index10 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;item.ThreadCount, item.SuccessCount, item.FailureCount, item.ElapsedMilliseconds); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number12 index11 alt1"&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="line number13 index12 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;} &lt;/code&gt;&lt;/div&gt;&lt;div class="line number14 index13 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;} &lt;/code&gt;&lt;/div&gt;&lt;div class="line number15 index14 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;Console.ReadKey(&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;true&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number16 index15 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;} &lt;/code&gt;&lt;/div&gt;&lt;div class="line number17 index16 alt2"&gt;&lt;code class="csharp plain"&gt;} &lt;/code&gt;&lt;/div&gt;&lt;div class="line number18 index17 alt1"&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="line number19 index18 alt2"&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;class&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;TestClass &lt;/code&gt;&lt;/div&gt;&lt;div class="line number20 index19 alt1"&gt;&lt;code class="csharp plain"&gt;{ &lt;/code&gt;&lt;/div&gt;&lt;div class="line number21 index20 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;public&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;bool&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;Execute() &lt;/code&gt;&lt;/div&gt;&lt;div class="line number22 index21 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;{ &lt;/code&gt;&lt;/div&gt;&lt;div class="line number23 index22 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;int&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;tempValue = GetRandom(); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number24 index23 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;System.Threading.Thread.Sleep(tempValue); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number25 index24 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;return&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;tempValue % 2 == 0; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number26 index25 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;} &lt;/code&gt;&lt;/div&gt;&lt;div class="line number27 index26 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;private&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;int&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;GetRandom() &lt;/code&gt;&lt;/div&gt;&lt;div class="line number28 index27 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;{ &lt;/code&gt;&lt;/div&gt;&lt;div class="line number29 index28 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;return&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;new&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;Random().Next(990, 1000); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number30 index29 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;} &lt;/code&gt;&lt;/div&gt;&lt;div class="line number31 index30 alt2"&gt;&lt;code class="csharp plain"&gt;}&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;测试类库提供了4个Execute方法的重载，一般情况下能满足我们的多线程并发测试场景了。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;另一地址：&lt;a href="http://blog.moozi.net/archives/multi-threaded-concurrent-test-library.html"&gt;http://blog.moozi.net/archives/multi-threaded-concurrent-test-library.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;关注更多：&lt;a href="http://blog.moozi.net"&gt;http://blog.moozi.net&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/moozi/aggbug/2018435.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/moozi/archive/2011/04/16/2018435.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/moozi/archive/2011/03/02/1969262.html</id><title type="text">在生产环境下，MONO与.NET Framework的性能差别。</title><summary type="text">上个月公司项目需要，在腾讯社区开放平台部署了基于mono的腾讯校友应用“公务员考试”。经过一周的观察，发现问题非常大。2月18日到2月24日的平均值在70.91%。而2月23日-3月1日平均值在76.61%。占用的CPU非常高。在访问用户数不高的情况下，单是MONO的守护进程就占用了75.0%的CPU。生产环境上是用Apache+mod_mono来做WEB站的，总的来看，对于WEB负载，MONO的情况并不理想。</summary><published>2011-03-02T13:07:00Z</published><updated>2011-03-02T13:07:00Z</updated><author><name>木子博客</name><uri>http://www.cnblogs.com/moozi/</uri></author><link rel="alternate" href="http://www.cnblogs.com/moozi/archive/2011/03/02/1969262.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/moozi/archive/2011/03/02/1969262.html"/><content type="html">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 上个月公司项目需要，在腾讯社区开放平台部署了基于mono的腾讯校友应用&amp;#8220;&lt;a title="公务员考试" href="http://gongwuyuan591up.qzoneapp.com/" target="_blank"&gt;公务员考试&lt;/a&gt;&amp;#8221;。经过一周的观察，发现问题非常大。 &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 我们来看mono在腾讯服务器上的CPU报表。&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/moozi/mono-cpu.jpg" width="786" height="259" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2月18日到2月24日的平均值在70.91%。而2月23日-3月1日平均值在76.61%。占用的CPU非常高。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 另一份基本相同的代码部署在Windows服务器上，我们看这台服务器的CPU使用率。&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/moozi/windows-cpu.jpg" width="697" height="443" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 这台服务器除了这个项目外，还负载了其它的Web项目。从报表反映的情况来看，运行状态非常健康。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 这两台服务器的配置分别是：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Tencent：CPU-Xeon E5506*2(2.13GHZ)，内存-7G，OS-Linux 2.6(suse)，MONO2.8.2&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Windows：CPU-Xeon E5420*4(2.50GHZ)，内存-4G，OS-Windows Server 2003，.NET Framework。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在服务器的配置上没有办法做直接的对比，附上Windows服务器，只是想从一个侧面来说明项目代码并不复杂，系统需要处理的计划量并不多。&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/moozi/mono-taskmanager.jpg" width="564" height="33" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在访问用户数不高的情况下，单是MONO的守护进程就占用了75.0%的CPU。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/moozi/tencent-online-user.jpg" width="1004" height="254" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 生产环境上是用Apache+mod_mono来做WEB站的，总的来看，对于WEB负载，MONO的情况并不理想。&lt;/p&gt;&lt;p&gt;&lt;span style="line-height: normal" class="Apple-style-span"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 关注更多相关内容，请移步：&amp;nbsp;&lt;span style="line-height: 21px; font-family: verdana, 'courier new'; font-size: 14px" class="Apple-style-span"&gt;&lt;a href="http://blog.moozi.net/archives/web-performance-optimization-practice-application-optimization.html" target="_blank"&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://blog.moozi.net/" target="_blank"&gt;http://blog.moozi.net/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/moozi/aggbug/1969262.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/moozi/archive/2011/03/02/1969262.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/moozi/archive/2011/03/01/web-performance-optimization-practice-application-optimization.html</id><title type="text">Web性能优化实践——应用层性能优化</title><summary type="text">随着公司项目的进一步推广，用户数量的增加，已经面临着单台服务器不能负载的问题。这次的优化由于时间关系主要分两步走，首先优化应用层代码以提高单台服务器的负载和吞吐率。之后再进行分表，引入队列、MemCached等分布式应用。任何一个优化都要针对已经存在的问题，从服务器监控的报表可以看到我们这个网站应用服务器带宽压力、数据库服务器带宽压力都很大，应用服务器的CPU使用率不高，因此，主要的优化是对应用服务器带宽和数据库服务器的写入压力做的优化，因为目的很明确，效果也是比较明显的。</summary><published>2011-03-01T02:29:00Z</published><updated>2011-03-01T02:29:00Z</updated><author><name>木子博客</name><uri>http://www.cnblogs.com/moozi/</uri></author><link rel="alternate" href="http://www.cnblogs.com/moozi/archive/2011/03/01/web-performance-optimization-practice-application-optimization.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/moozi/archive/2011/03/01/web-performance-optimization-practice-application-optimization.html"/><content type="text">随着公司项目的进一步推广，用户数量的增加，已经面临着单台服务器不能负载的问题。这次的优化由于时间关系主要分两步走，首先优化应用层代码以提高单台服务器的负载和吞吐率。之后再进行分表，引入队列、MemCached等分布式应用。任何一个优化都要针对已经存在的问题，从服务器监控的报表可以看到我们这个网站应用服务器带宽压力、数据库服务器带宽压力都很大，应用服务器的CPU使用率不高，因此，主要的优化是对应用服务器带宽和数据库服务器的写入压力做的优化，因为目的很明确，效果也是比较明显的。</content></entry><entry><id>http://www.cnblogs.com/moozi/archive/2011/01/26/1945754.html</id><title type="text">一次艰难的mono环境部署</title><summary type="text">继上篇文章《Mono的兼容性问题》之后，现在总结一下我在suse 10中部署mono环境遇到的一些问题及其处理办法。腾讯社区开放平台提供的体验区的服务器环境是这样的：Linux version 2.6.16.60 (gcc version 4.1.2 20070115 (SUSE Linux))这个Linux内核的版本号应该是SLES（SUSE Linux Enterprise Server 10 SP2）的操作系统。mono原来的版本号是1.2.2，而我们需要2.8.2的mono。腾讯的服务器是没有配置dns解析功能的，所以不能直接用yast2来通过更新源来升级mono；对于可以用yast2安装的，可以参考我的《在openSUSE中部署基于apache的mono环境》。而用rpm手工安装，太多的程序依赖处理起来很麻烦，只好用通过编译mono源码的方式来安装了。</summary><published>2011-01-26T12:06:00Z</published><updated>2011-01-26T12:06:00Z</updated><author><name>木子博客</name><uri>http://www.cnblogs.com/moozi/</uri></author><link rel="alternate" href="http://www.cnblogs.com/moozi/archive/2011/01/26/1945754.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/moozi/archive/2011/01/26/1945754.html"/><content type="html">【摘要】继上篇文章《Mono的兼容性问题》之后，现在总结一下我在suse 10中部署mono环境遇到的一些问题及其处理办法。腾讯社区开放平台提供的体验区的服务器环境是这样的：Linux version 2.6.16.60 (gcc version 4.1.2 20070115 (SUSE Linux))这个Linux内核的版本号应该是SLES（SUSE Linux Enterprise Server 10 SP2）的操作系统。mono原来的版本号是1.2.2，而我们需要2.8.2的mono。腾讯的服务器是没有配置dns解析功能的，所以不能直接用yast2来通过更新源来升级mono；对于可以用yast2安装的，可以参考我的《在openSUSE中部署基于apache的mono环境》。而用rpm手工安装，太多的程序依赖处理起来很麻烦，只好用通过编译mono源码的方式来安装了。 &lt;a href="继上篇文章《Mono的兼容性问题》之后，现在总结一下我在suse 10中部署mono环境遇到的一些问题及其处理办法。腾讯社区开放平台提供的体验区的服务器环境是这样的：Linux version 2.6.16.60 (gcc version 4.1.2 20070115 (SUSE Linux))这个Linux内核的版本号应该是SLES（SUSE Linux Enterprise Server 10 SP2）的操作系统。mono原来的版本号是1.2.2，而我们需要2.8.2的mono。腾讯的服务器是没有配置dns解析功能的，所以不能直接用yast2来通过更新源来升级mono；对于可以用yast2安装的，可以参考我的《在openSUSE中部署基于apache的mono环境》。而用rpm手工安装，太多的程序依赖处理起来很麻烦，只好用通过编译mono源码的方式来安装了。" target="_blank"&gt;http://www.cnblogs.com/moozi/archive/2011/01/26/1945754.html&lt;/a&gt;&lt;img src="http://www.cnblogs.com/moozi/aggbug/1945754.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/moozi/archive/2011/01/26/1945754.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/moozi/archive/2011/01/24/1942781.html</id><title type="text">在MONO 2.8.2中遇到的一些兼容性问题</title><summary type="text">最近公司的一个项目因为要接入腾讯开放平台，需要转移到mono环境中，在做mono兼容性调整的时候遇到了一些问题，记录下来跟大家分享一下。借助Moma的分析结果可以指导我们如何快速的调整mono的兼容性，但是这个分析结果也不完全正确，一些实现方式MoMA提示不兼容，但在mono中是可以正常使用的。总的说来，mono整体的兼容性是非常不错的，在linux中跑起来很流畅，mono 2.8.2已经不再是玩具了。</summary><published>2011-01-23T16:28:00Z</published><updated>2011-01-23T16:28:00Z</updated><author><name>木子博客</name><uri>http://www.cnblogs.com/moozi/</uri></author><link rel="alternate" href="http://www.cnblogs.com/moozi/archive/2011/01/24/1942781.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/moozi/archive/2011/01/24/1942781.html"/><content type="html">&lt;div&gt;&lt;span style="font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; font-size: 13px; line-height: normal; "&gt;&lt;p&gt;最近公司的一个项目因为要接入腾讯开放平台，需要转移到mono环境中，在做mono兼容性调整的时候遇到了一些问题，记录下来跟大家分享一下。&lt;/p&gt;&lt;p&gt;首先，要把.NET Framework的应用迁移到mono平台，一定要借助这个软件：&lt;a href="http://www.mono-project.com/MoMA" target="_blank" style="text-decoration: none; color: #0044aa; "&gt;MoMA&lt;/a&gt;。Mono Migration Analyzer (Moma)是一个用于开发者使用的MS .net下开发的应用程序迁移到Mono平台的不兼容性检测工具。工具通过分析.dll或者.exe程序集的代码是否符合ECMA CLI，大家都知道符合ECMA CLI标准的.net 程序可以运行于MS .net和Mono平台。这个工具可以帮助我们生成一个很详细的mono兼容性文档，可以帮助我们调整程序的兼容性。&lt;/p&gt;&lt;p&gt;不过这个工具的分析结果也不完全正确，一些实现方式MoMA提示不兼容，但在mono中是可以正常使用的。&lt;/p&gt;&lt;p&gt;遇到的一些不兼容的问题：&lt;/p&gt;&lt;p&gt;1、项目是使用JS来调用Web Services来做的，用xsp做WEB服务器端的时候发现如果Web Services接口中有使用可空参数的时候，不能正常使用，即使回传的值不是null，接口依然只能接收到null值。&lt;/p&gt;&lt;p&gt;2、如果使用nginx通过调用mono的fastcgi来做WEB服务器，这种方式将不支持Web Services。Apache的mod_mono暂未做测试。&lt;/p&gt;&lt;p&gt;3、在mono环境中，TimeZoneInfo.Local无法使用，这是mono的一个BUG。&lt;/p&gt;&lt;p&gt;4、MySQL Connector的mono版本中有2个类库，一个是.net 2.0，一个是.net 4.0。如果把2.0的类库也用MoMA分析，会提示很多不支持的方法；如果你是用nginx的fastcgi解析.net程序，需要使用4.0的MySQL类库；而在xsp中，使用2.0的类库就好了。&lt;/p&gt;&lt;p&gt;5、如果你的操作系统是SLES，建议获取mono的源码编译完装，会让你省去很多事情。&lt;/p&gt;&lt;p&gt;6、在SLES编译XSP源码时，你系统的sqlite3的版本号要大于3.5.0，否则编译不过。&lt;/p&gt;&lt;p&gt;7、把项目转到mono平台，风险还是非常大的，非常多第三方类库不能直接在mono平台中使用，如Combres/log4net/Quartz.NET等等，都需要修改源代码。&lt;/p&gt;&lt;p&gt;暂时先整理这些问题，后面会补上在SLES中部署mono环境的详细过程。&lt;/p&gt;&lt;p&gt;总的说来，mono整体的兼容性是非常不错的，在linux中跑起来很流畅，mono 2.8.2已经不再是玩具了。关于mono，园子里的&lt;a href="http://www.cnblogs.com/shanyou/" target="_blank" style="text-decoration: none; color: #0044aa; "&gt;geffzhang&lt;/a&gt;有很深入的研究，有兴趣的同学可以去看看他的博客。&lt;/p&gt;&lt;p&gt;大家也可以关注我的另外一个独立博客： &lt;a href="http://blog.moozi.net/archives/web-services-compatible-in-mono-2-8-2.html" target="_blank"&gt;http://blog.moozi.net&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/moozi/aggbug/1942781.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/moozi/archive/2011/01/24/1942781.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/moozi/archive/2010/11/20/js-debug-logger.html</id><title type="text">简单实用的js调试logger组件</title><summary type="text">开发js组件的时间调试总是麻烦的，最常用的就是用alert或者debugger来测试js的运行状态。但这两种方式都有它的局限性，alert会有中断，有些时候alert出来的值并不可靠，闭包的时候用alert可能会得到不正确的值。debugger使用起来其实也挺纠结的，只有ie支持。所以最合理的方式是js把运行过程需要调试的值输出到页面，或者写到cookie也可以，这种方式不会有alert中断带来值不正确的问题，也不会受浏览器类型的限制，唯一纠结的是操作起来很麻烦。于是，有了下面说的这个js组件。这个组件的实现参考了log4net组件的记录方式，我们利用这个js的logger组件，就可以用log的输出的方式来进行你的调试工作了。</summary><published>2010-11-20T11:42:00Z</published><updated>2010-11-20T11:42:00Z</updated><author><name>木子博客</name><uri>http://www.cnblogs.com/moozi/</uri></author><link rel="alternate" href="http://www.cnblogs.com/moozi/archive/2010/11/20/js-debug-logger.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/moozi/archive/2010/11/20/js-debug-logger.html"/><content type="html">&lt;p&gt;开发js组件的时间调试总是麻烦的，最常用的就是用alert或者debugger来测试js的运行状态。但这两种方式都有它的局限性，alert会有中断，有些时候alert出来的值并不可靠，闭包的时候用alert可能会得到不正确的值。debugger使用起来其实也挺纠结的，只有ie支持。所以最合理的方式是js把运行过程需要调试的值输出到页面，或者写到cookie也可以，这种方式不会有alert中断带来值不正确的问题，也不会受浏览器类型的限制，唯一纠结的是操作起来很麻烦。&lt;/p&gt;&lt;p&gt;于是，有了下面说的这个js组件。这个组件的实现参考了log4net组件的记录方式，我们利用这个js的logger组件，就可以用log的输出的方式来进行你的调试工作了。&lt;/p&gt;&lt;div&gt;&lt;div id="highlighter_579635" class="syntaxhighlighter  js ie"&gt;&lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;div class="line number1 index0 alt2"&gt;1&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;2&lt;/div&gt;&lt;div class="line number3 index2 alt2"&gt;3&lt;/div&gt;&lt;div class="line number4 index3 alt1"&gt;4&lt;/div&gt;&lt;div class="line number5 index4 alt2"&gt;5&lt;/div&gt;&lt;div class="line number6 index5 alt1"&gt;6&lt;/div&gt;&lt;div class="line number7 index6 alt2"&gt;7&lt;/div&gt;&lt;div class="line number8 index7 alt1"&gt;8&lt;/div&gt;&lt;div class="line number9 index8 alt2"&gt;9&lt;/div&gt;&lt;div class="line number10 index9 alt1"&gt;10&lt;/div&gt;&lt;div class="line number11 index10 alt2"&gt;11&lt;/div&gt;&lt;div class="line number12 index11 alt1"&gt;12&lt;/div&gt;&lt;div class="line number13 index12 alt2"&gt;13&lt;/div&gt;&lt;div class="line number14 index13 alt1"&gt;14&lt;/div&gt;&lt;div class="line number15 index14 alt2"&gt;15&lt;/div&gt;&lt;div class="line number16 index15 alt1"&gt;16&lt;/div&gt;&lt;div class="line number17 index16 alt2"&gt;17&lt;/div&gt;&lt;div class="line number18 index17 alt1"&gt;18&lt;/div&gt;&lt;div class="line number19 index18 alt2"&gt;19&lt;/div&gt;&lt;div class="line number20 index19 alt1"&gt;20&lt;/div&gt;&lt;div class="line number21 index20 alt2"&gt;21&lt;/div&gt;&lt;div class="line number22 index21 alt1"&gt;22&lt;/div&gt;&lt;div class="line number23 index22 alt2"&gt;23&lt;/div&gt;&lt;div class="line number24 index23 alt1"&gt;24&lt;/div&gt;&lt;div class="line number25 index24 alt2"&gt;25&lt;/div&gt;&lt;div class="line number26 index25 alt1"&gt;26&lt;/div&gt;&lt;div class="line number27 index26 alt2"&gt;27&lt;/div&gt;&lt;div class="line number28 index27 alt1"&gt;28&lt;/div&gt;&lt;div class="line number29 index28 alt2"&gt;29&lt;/div&gt;&lt;div class="line number30 index29 alt1"&gt;30&lt;/div&gt;&lt;div class="line number31 index30 alt2"&gt;31&lt;/div&gt;&lt;div class="line number32 index31 alt1"&gt;32&lt;/div&gt;&lt;div class="line number33 index32 alt2"&gt;33&lt;/div&gt;&lt;div class="line number34 index33 alt1"&gt;34&lt;/div&gt;&lt;div class="line number35 index34 alt2"&gt;35&lt;/div&gt;&lt;div class="line number36 index35 alt1"&gt;36&lt;/div&gt;&lt;div class="line number37 index36 alt2"&gt;37&lt;/div&gt;&lt;div class="line number38 index37 alt1"&gt;38&lt;/div&gt;&lt;div class="line number39 index38 alt2"&gt;39&lt;/div&gt;&lt;div class="line number40 index39 alt1"&gt;40&lt;/div&gt;&lt;div class="line number41 index40 alt2"&gt;41&lt;/div&gt;&lt;div class="line number42 index41 alt1"&gt;42&lt;/div&gt;&lt;div class="line number43 index42 alt2"&gt;43&lt;/div&gt;&lt;div class="line number44 index43 alt1"&gt;44&lt;/div&gt;&lt;div class="line number45 index44 alt2"&gt;45&lt;/div&gt;&lt;div class="line number46 index45 alt1"&gt;46&lt;/div&gt;&lt;div class="line number47 index46 alt2"&gt;47&lt;/div&gt;&lt;div class="line number48 index47 alt1"&gt;48&lt;/div&gt;&lt;div class="line number49 index48 alt2"&gt;49&lt;/div&gt;&lt;div class="line number50 index49 alt1"&gt;50&lt;/div&gt;&lt;div class="line number51 index50 alt2"&gt;51&lt;/div&gt;&lt;div class="line number52 index51 alt1"&gt;52&lt;/div&gt;&lt;div class="line number53 index52 alt2"&gt;53&lt;/div&gt;&lt;div class="line number54 index53 alt1"&gt;54&lt;/div&gt;&lt;div class="line number55 index54 alt2"&gt;55&lt;/div&gt;&lt;div class="line number56 index55 alt1"&gt;56&lt;/div&gt;&lt;div class="line number57 index56 alt2"&gt;57&lt;/div&gt;&lt;div class="line number58 index57 alt1"&gt;58&lt;/div&gt;&lt;div class="line number59 index58 alt2"&gt;59&lt;/div&gt;&lt;div class="line number60 index59 alt1"&gt;60&lt;/div&gt;&lt;div class="line number61 index60 alt2"&gt;61&lt;/div&gt;&lt;div class="line number62 index61 alt1"&gt;62&lt;/div&gt;&lt;div class="line number63 index62 alt2"&gt;63&lt;/div&gt;&lt;div class="line number64 index63 alt1"&gt;64&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="container"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;code class="js comments"&gt;&lt;font color="#008200"&gt;/* &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;&lt;code class="js comments"&gt;&lt;font color="#008200"&gt;js调试组件 &lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number3 index2 alt2"&gt;&lt;code class="js comments"&gt;&lt;font color="#008200"&gt;*/&lt;/font&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number4 index3 alt1"&gt;&lt;code class="js plain"&gt;(&lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;function&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="js plain"&gt;() { &lt;/code&gt;&lt;/div&gt;&lt;div class="line number5 index4 alt2"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;var&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="js plain"&gt;logger = &lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;function&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="js plain"&gt;(level, object, viewType) { &lt;/code&gt;&lt;/div&gt;&lt;div class="line number6 index5 alt1"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;this&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="js plain"&gt;.level = level; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number7 index6 alt2"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;this&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="js plain"&gt;.object = object; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number8 index7 alt1"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;this&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="js plain"&gt;.viewType = viewType; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number9 index8 alt2"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;} &lt;/code&gt;&lt;/div&gt;&lt;div class="line number10 index9 alt1"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;logger.LEVEL_DEBUG = 0; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number11 index10 alt2"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;logger.LEVEL_INFO = 1; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number12 index11 alt1"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;logger.LEVEL_WARN = 2; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number13 index12 alt2"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;logger.LEVEL_ERROR = 3; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number14 index13 alt1"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;logger.LEVEL_FATAL = 4; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number15 index14 alt2"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;logger.VIEW_TYPE_ALERT = 0; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number16 index15 alt1"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;logger.VIEW_TYPE_APPEND = 1; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number17 index16 alt2"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;logger.prototype = { &lt;/code&gt;&lt;/div&gt;&lt;div class="line number18 index17 alt1"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;setLevel: &lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;function&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="js plain"&gt;(level) { &lt;/code&gt;&lt;/div&gt;&lt;div class="line number19 index18 alt2"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;this&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="js plain"&gt;.level = level; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number20 index19 alt1"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;}, &lt;/code&gt;&lt;/div&gt;&lt;div class="line number21 index20 alt2"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;setObject: &lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;function&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="js plain"&gt;(o) { &lt;/code&gt;&lt;/div&gt;&lt;div class="line number22 index21 alt1"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;if&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="js plain"&gt;(&lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;typeof&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="js plain"&gt;o == &lt;/code&gt;&lt;code class="js string"&gt;&lt;font color="#0000ff"&gt;'string'&lt;/font&gt;&lt;/code&gt;&lt;code class="js plain"&gt;) { &lt;/code&gt;&lt;/div&gt;&lt;div class="line number23 index22 alt2"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;this&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="js plain"&gt;.object = document.getElementById(o); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number24 index23 alt1"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;} &lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;else&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="js plain"&gt;{ &lt;/code&gt;&lt;/div&gt;&lt;div class="line number25 index24 alt2"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;this&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="js plain"&gt;.object = o; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number26 index25 alt1"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;} &lt;/code&gt;&lt;/div&gt;&lt;div class="line number27 index26 alt2"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;}, &lt;/code&gt;&lt;/div&gt;&lt;div class="line number28 index27 alt1"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;setViewType: &lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;function&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="js plain"&gt;(type) { &lt;/code&gt;&lt;/div&gt;&lt;div class="line number29 index28 alt2"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;this&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="js plain"&gt;.viewType = type; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number30 index29 alt1"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;}, &lt;/code&gt;&lt;/div&gt;&lt;div class="line number31 index30 alt2"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;log: &lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;function&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="js plain"&gt;(s) { &lt;/code&gt;&lt;/div&gt;&lt;div class="line number32 index31 alt1"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;this&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="js plain"&gt;.message(100, s); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number33 index32 alt2"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;}, &lt;/code&gt;&lt;/div&gt;&lt;div class="line number34 index33 alt1"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;debug: &lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;function&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="js plain"&gt;(s) { &lt;/code&gt;&lt;/div&gt;&lt;div class="line number35 index34 alt2"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;this&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="js plain"&gt;.message(logger.LEVEL_DEBUG, s); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number36 index35 alt1"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;}, &lt;/code&gt;&lt;/div&gt;&lt;div class="line number37 index36 alt2"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;info: &lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;function&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="js plain"&gt;(s) { &lt;/code&gt;&lt;/div&gt;&lt;div class="line number38 index37 alt1"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;this&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="js plain"&gt;.message(logger.LEVEL_INFO, s); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number39 index38 alt2"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;}, &lt;/code&gt;&lt;/div&gt;&lt;div class="line number40 index39 alt1"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;warn: &lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;function&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="js plain"&gt;(s) { &lt;/code&gt;&lt;/div&gt;&lt;div class="line number41 index40 alt2"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;this&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="js plain"&gt;.message(logger.LEVEL_WARN, s); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number42 index41 alt1"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;}, &lt;/code&gt;&lt;/div&gt;&lt;div class="line number43 index42 alt2"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;error: &lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;function&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="js plain"&gt;(s) { &lt;/code&gt;&lt;/div&gt;&lt;div class="line number44 index43 alt1"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;this&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="js plain"&gt;.message(logger.LEVEL_ERROR, s); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number45 index44 alt2"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;}, &lt;/code&gt;&lt;/div&gt;&lt;div class="line number46 index45 alt1"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;fatal: &lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;function&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="js plain"&gt;(s) { &lt;/code&gt;&lt;/div&gt;&lt;div class="line number47 index46 alt2"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;this&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="js plain"&gt;.message(logger.LEVEL_FATAL, s); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number48 index47 alt1"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;}, &lt;/code&gt;&lt;/div&gt;&lt;div class="line number49 index48 alt2"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;message: &lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;function&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="js plain"&gt;(level, s) { &lt;/code&gt;&lt;/div&gt;&lt;div class="line number50 index49 alt1"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;if&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="js plain"&gt;(level &amp;gt;= &lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;this&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="js plain"&gt;.level) { &lt;/code&gt;&lt;/div&gt;&lt;div class="line number51 index50 alt2"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;if&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="js plain"&gt;(&lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;this&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="js plain"&gt;.object != &lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;null&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="js plain"&gt;) { &lt;/code&gt;&lt;/div&gt;&lt;div class="line number52 index51 alt1"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;this&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="js plain"&gt;.object.innerHTML = s; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number53 index52 alt2"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;} &lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;else&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;if&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="js plain"&gt;(&lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;this&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="js plain"&gt;.viewType == logger.VIEW_TYPE_ALERT) { &lt;/code&gt;&lt;/div&gt;&lt;div class="line number54 index53 alt1"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;alert(s); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number55 index54 alt2"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;} &lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;else&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="js plain"&gt;{ &lt;/code&gt;&lt;/div&gt;&lt;div class="line number56 index55 alt1"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;document.body.appendChild(document.createTextNode(s)); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number57 index56 alt2"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;document.body.appendChild(document.createElement(&lt;/code&gt;&lt;code class="js string"&gt;&lt;font color="#0000ff"&gt;"br"&lt;/font&gt;&lt;/code&gt;&lt;code class="js plain"&gt;)); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number58 index57 alt1"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;} &lt;/code&gt;&lt;/div&gt;&lt;div class="line number59 index58 alt2"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;} &lt;/code&gt;&lt;/div&gt;&lt;div class="line number60 index59 alt1"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;} &lt;/code&gt;&lt;/div&gt;&lt;div class="line number61 index60 alt2"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;}; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number62 index61 alt1"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;if&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="js plain"&gt;(&lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;typeof&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="js plain"&gt;window.Logger == &lt;/code&gt;&lt;code class="js string"&gt;&lt;font color="#0000ff"&gt;'undefined'&lt;/font&gt;&lt;/code&gt; &lt;code class="js plain"&gt;|| window.Logger == &lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;null&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="js plain"&gt;) &lt;/code&gt;&lt;/div&gt;&lt;div class="line number63 index62 alt2"&gt;&lt;code class="js spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="js plain"&gt;window.Logger = &lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;new&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="js plain"&gt;logger(logger.LEVEL_DEBUG, &lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;null&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="js plain"&gt;, logger.VIEW_TYPE_APPEND); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number64 index63 alt1"&gt;&lt;code class="js plain"&gt;})();&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;怎么使用呢？&lt;/p&gt;&lt;p&gt;这个js组件往window对象注册了Logger对象，我们可以用Logger.log/Logger.debug/Logger.info/Logger.warn/Logger.error/Logger.fatal来输出不同的调试信息。&lt;/p&gt;&lt;p&gt;示例代码如下：&lt;/p&gt;&lt;div&gt;&lt;div id="highlighter_495536" class="syntaxhighlighter  js ie"&gt;&lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;div class="line number1 index0 alt2"&gt;1&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;2&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="container"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;code class="js plain"&gt;Logger.debug(&lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;new&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="js plain"&gt;Date()); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;&lt;code class="js plain"&gt;Logger.debug(&lt;/code&gt;&lt;code class="js keyword"&gt;&lt;strong&gt;&lt;font color="#006699"&gt;new&lt;/font&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="js plain"&gt;Date().addHours(3));&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;很简单，再也不用每个地方都写document.getElementId().innerHtml或者alert/debugger来输出内容了。&lt;/p&gt;&lt;p&gt;示例代码中使用的addHours是我扩展js的Date对象方法，想要了解更多的朋友可以查看&lt;a title="扩展js的Date方法" href="http://blog.moozi.net/archives/extension-of-javascript-date-methods.html"&gt;&lt;font color="#0044aa"&gt;《扩展js的Date方法》&lt;/font&gt;&lt;/a&gt;。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/moozi/aggbug/1882693.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/moozi/archive/2010/11/20/js-debug-logger.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/moozi/archive/2010/11/05/1870260.html</id><title type="text">腾讯社区开放平台C# SDK</title><summary type="text">   腾讯社区开放平台是基于QQ空间、朋友社区（QQ校友）两大社交网络的开放平台。至今官方提供了一系列的开放接口（Open API）和开发工具包（SDK），开发者可以通过Open API获取登录用户信息、用户签名信息以及好友关系链信息等。已上线的应用还可以调用支付和监控接口，实现支付功能，查看应用实时运维数据。  腾讯官方给出了不少的SDK，点这里进入官方地址。遗憾的是没有开放C#的SDK。  我们DotNet开发者不能落后其它平台的开发者，这里开源我的腾讯社区开放平台SDK。</summary><published>2010-11-05T12:41:00Z</published><updated>2010-11-05T12:41:00Z</updated><author><name>木子博客</name><uri>http://www.cnblogs.com/moozi/</uri></author><link rel="alternate" href="http://www.cnblogs.com/moozi/archive/2010/11/05/1870260.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/moozi/archive/2010/11/05/1870260.html"/><content type="html">&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 腾讯社区开放平台是基于QQ空间、朋友社区（QQ校友）两大社交网络的开放平台。至今官方提供了一系列的开放接口（Open API）和开发工具包（SDK），开发者可以通过Open API获取登录用户信息、用户签名信息以及好友关系链信息等。已上线的应用还可以调用支付和监控接口，实现支付功能，查看应用实时运维数据。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 腾讯官方给出了不少的SDK，&lt;a title="SDK下载" href="http://wiki.opensns.qq.com/wiki/SDK%E4%B8%8B%E8%BD%BD" target="_blank"&gt;点这里进入官方地址&lt;/a&gt;。遗憾的是没有开放C#的SDK。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 我们DotNet开发者不能落后其它平台的开发者，这里开源我的腾讯社区开放平台SDK。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 先上单元测试结果吧，这个还是比较重要的。&lt;/p&gt;&lt;p&gt;&lt;a href="http://blog.moozi.net/wp-content/uploads/2010/11/qq-opensns-unittest.jpg"&gt;&lt;img class="alignnone size-full wp-image-58" title="腾讯社区开放平台SDK单元测试" alt="" src="http://blog.moozi.net/wp-content/uploads/2010/11/qq-opensns-unittest.jpg" width="282" height="171" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 上面的七个方法对应&lt;a href="http://wiki.opensns.qq.com/wiki/API%E6%96%87%E6%A1%A3" target="_blank"&gt;腾讯官方文档&lt;/a&gt;的7个接口。&lt;/p&gt;&lt;p&gt;&lt;a href="http://blog.moozi.net/wp-content/uploads/2010/11/qq-opensns-api.jpg"&gt;&lt;img class="alignnone size-medium wp-image-59" title="腾讯社区开放平台API" alt="" src="http://blog.moozi.net/wp-content/uploads/2010/11/qq-opensns-api-188x300.jpg" width="188" height="300" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 类库使用说明：&lt;/p&gt;&lt;p&gt;1、配置：你申请应用后，腾讯会给你AppId,AppKey,AppName这三个值，你需要把这三个值配置到App.config或者web.config中。&lt;/p&gt;&lt;div&gt;&lt;div id="highlighter_326848" class="syntaxhighlighter  xml ie"&gt;&lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;div class="line number1 index0 alt2"&gt;1&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;2&lt;/div&gt;&lt;div class="line number3 index2 alt2"&gt;3&lt;/div&gt;&lt;div class="line number4 index3 alt1"&gt;4&lt;/div&gt;&lt;div class="line number5 index4 alt2"&gt;5&lt;/div&gt;&lt;div class="line number6 index5 alt1"&gt;6&lt;/div&gt;&lt;div class="line number7 index6 alt2"&gt;7&lt;/div&gt;&lt;div class="line number8 index7 alt1"&gt;8&lt;/div&gt;&lt;div class="line number9 index8 alt2"&gt;9&lt;/div&gt;&lt;div class="line number10 index9 alt1"&gt;10&lt;/div&gt;&lt;div class="line number11 index10 alt2"&gt;11&lt;/div&gt;&lt;div class="line number12 index11 alt1"&gt;12&lt;/div&gt;&lt;div class="line number13 index12 alt2"&gt;13&lt;/div&gt;&lt;div class="line number14 index13 alt1"&gt;14&lt;/div&gt;&lt;div class="line number15 index14 alt2"&gt;15&lt;/div&gt;&lt;div class="line number16 index15 alt1"&gt;16&lt;/div&gt;&lt;div class="line number17 index16 alt2"&gt;17&lt;/div&gt;&lt;div class="line number18 index17 alt1"&gt;18&lt;/div&gt;&lt;div class="line number19 index18 alt2"&gt;19&lt;/div&gt;&lt;div class="line number20 index19 alt1"&gt;20&lt;/div&gt;&lt;div class="line number21 index20 alt2"&gt;21&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="container"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;code class="xml plain"&gt;&amp;lt;?&lt;/code&gt;&lt;code class="xml keyword"&gt;xml&lt;/code&gt; &lt;code class="xml color1"&gt;version&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"1.0"&lt;/code&gt; &lt;code class="xml color1"&gt;encoding&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"utf-8"&lt;/code&gt; &lt;code class="xml plain"&gt;?&amp;gt; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="line number3 index2 alt2"&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;configuration&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number4 index3 alt1"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="line number5 index4 alt2"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;configSections&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number6 index5 alt1"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="line number7 index6 alt2"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;section&lt;/code&gt; &lt;code class="xml color1"&gt;name&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"qq.api"&lt;/code&gt; &lt;code class="xml color1"&gt;type&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"System.Configuration.NameValueSectionHandler"&lt;/code&gt;&lt;code class="xml plain"&gt;/&amp;gt; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number8 index7 alt1"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="line number9 index8 alt2"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;configSections&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number10 index9 alt1"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="line number11 index10 alt2"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;qq.api&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number12 index11 alt1"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="line number13 index12 alt2"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;add&lt;/code&gt; &lt;code class="xml color1"&gt;key&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"AppId"&lt;/code&gt; &lt;code class="xml color1"&gt;value&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"APP ID"&lt;/code&gt;&lt;code class="xml plain"&gt;/&amp;gt; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number14 index13 alt1"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="line number15 index14 alt2"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;add&lt;/code&gt; &lt;code class="xml color1"&gt;key&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"AppKey"&lt;/code&gt; &lt;code class="xml color1"&gt;value&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"APP KEY"&lt;/code&gt;&lt;code class="xml plain"&gt;/&amp;gt; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number16 index15 alt1"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="line number17 index16 alt2"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;add&lt;/code&gt; &lt;code class="xml color1"&gt;key&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"AppName"&lt;/code&gt; &lt;code class="xml color1"&gt;value&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"APP NAME"&lt;/code&gt;&lt;code class="xml plain"&gt;/&amp;gt; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number18 index17 alt1"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="line number19 index18 alt2"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;qq.api&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number20 index19 alt1"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="line number21 index20 alt2"&gt;&lt;code class="xml plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;configuration&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;2、在你的项目中引用QQToolkit，然后使用如下方式调用&lt;/p&gt;&lt;div&gt;&lt;div id="highlighter_7125" class="syntaxhighlighter  csharp ie"&gt;&lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;div class="line number1 index0 alt2"&gt;1&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;2&lt;/div&gt;&lt;div class="line number3 index2 alt2"&gt;3&lt;/div&gt;&lt;div class="line number4 index3 alt1"&gt;4&lt;/div&gt;&lt;div class="line number5 index4 alt2"&gt;5&lt;/div&gt;&lt;div class="line number6 index5 alt1"&gt;6&lt;/div&gt;&lt;div class="line number7 index6 alt2"&gt;7&lt;/div&gt;&lt;div class="line number8 index7 alt1"&gt;8&lt;/div&gt;&lt;div class="line number9 index8 alt2"&gt;9&lt;/div&gt;&lt;div class="line number10 index9 alt1"&gt;10&lt;/div&gt;&lt;div class="line number11 index10 alt2"&gt;11&lt;/div&gt;&lt;div class="line number12 index11 alt1"&gt;12&lt;/div&gt;&lt;div class="line number13 index12 alt2"&gt;13&lt;/div&gt;&lt;div class="line number14 index13 alt1"&gt;14&lt;/div&gt;&lt;div class="line number15 index14 alt2"&gt;15&lt;/div&gt;&lt;div class="line number16 index15 alt1"&gt;16&lt;/div&gt;&lt;div class="line number17 index16 alt2"&gt;17&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="container"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;code class="csharp plain"&gt;User user = &lt;/code&gt;&lt;code class="csharp keyword"&gt;null&lt;/code&gt;&lt;code class="csharp plain"&gt;; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="line number3 index2 alt2"&gt;&lt;code class="csharp keyword"&gt;try&lt;/code&gt;&lt;/div&gt;&lt;div class="line number4 index3 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="line number5 index4 alt2"&gt;&lt;code class="csharp plain"&gt;{ &lt;/code&gt;&lt;/div&gt;&lt;div class="line number6 index5 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="line number7 index6 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp plain"&gt;user = QQClient.Instance.GetUserInfo(&lt;/code&gt;&lt;code class="csharp string"&gt;"openId"&lt;/code&gt;&lt;code class="csharp plain"&gt;, &lt;/code&gt;&lt;code class="csharp string"&gt;"openKey"&lt;/code&gt;&lt;code class="csharp plain"&gt;); &lt;/code&gt;&lt;/div&gt;&lt;div class="line number8 index7 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="line number9 index8 alt2"&gt;&lt;code class="csharp plain"&gt;} &lt;/code&gt;&lt;/div&gt;&lt;div class="line number10 index9 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="line number11 index10 alt2"&gt;&lt;code class="csharp keyword"&gt;catch&lt;/code&gt; &lt;code class="csharp plain"&gt;(WebException ex) &lt;/code&gt;&lt;/div&gt;&lt;div class="line number12 index11 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="line number13 index12 alt2"&gt;&lt;code class="csharp plain"&gt;{ &lt;/code&gt;&lt;/div&gt;&lt;div class="line number14 index13 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="line number15 index14 alt2"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="csharp keyword"&gt;throw&lt;/code&gt; &lt;code class="csharp plain"&gt;ex; &lt;/code&gt;&lt;/div&gt;&lt;div class="line number16 index15 alt1"&gt;&lt;code class="csharp spaces"&gt;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="line number17 index16 alt2"&gt;&lt;code class="csharp plain"&gt;}&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; QQClient.Instance是一个单例，你在调用接口的时候，需要传入腾讯给的openId和openKey才能正常的获取数据。QQ校友插件是通过iframe调用你的网站，而openId和openKey会通过url传参给你。可以通过Request.QueryString["openId"]和Request.QueryString["openKey"]得到。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; openKey疑是时间戳，每次的值都不一样。你可以把腾讯给你的openId和openKey自己缓存起来方便使用，我测试过openKey的过期时间，7个小时内都能正常调用接口，但很奇怪的是每次测试都在7个小时左右的时间会停止。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 组件内部的实现细节我就不再陈述，这里附上类图，具体的实现大家可以看源码。有问题可以给我留言（请移步至：&lt;a href="http://blog.moozi.net/archives/qq-opensns-c-sharp-sdk.html" target="_blank"&gt;http://blog.moozi.net/archives/qq-opensns-c-sharp-sdk.html&lt;/a&gt;）&amp;#8230;&lt;/p&gt;&lt;p&gt;&lt;a href="http://blog.moozi.net/wp-content/uploads/2010/11/qq-opensns-toolkit-classdiagram.jpg"&gt;&lt;img class="alignnone size-medium wp-image-60" title="腾讯社区开放平台C# SDK组件类图" alt="" src="http://blog.moozi.net/wp-content/uploads/2010/11/qq-opensns-toolkit-classdiagram-300x208.jpg" width="300" height="208" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://blog.moozi.net/archives/qq-opensns-c-sharp-sdk.html" target="_blank"&gt;猛点这里下载QQToolkit&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/moozi/aggbug/1870260.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/moozi/archive/2010/11/05/1870260.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/moozi/archive/2010/10/16/1853240.html</id><title type="text">本命年第三季度阶段反思</title><summary type="text">人的一生就是这样不断学习、沉淀、反思、感悟的过程。只是想要清楚自己什么时候应该想要什么真的很难。我想，无论什么时候，得意也好失意也罢，心态都至关重要。在心态修炼这方面，这一年确实有不少的提高，对人对事的看法也更加客观了。</summary><published>2010-10-16T13:08:00Z</published><updated>2010-10-16T13:08:00Z</updated><author><name>木子博客</name><uri>http://www.cnblogs.com/moozi/</uri></author><link rel="alternate" href="http://www.cnblogs.com/moozi/archive/2010/10/16/1853240.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/moozi/archive/2010/10/16/1853240.html"/><content type="html">&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;好像是在PZ的博客还是日志上看到这样一句话：当你发现和大多数人一样的时候，就到了你反思的时候。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;本命年快要过去了，回顾这10个月，没有什么特别多的挫折也没有特别的幸运，算是比较平淡吧。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;慢慢地不太喜欢出去吃喝玩乐了，每个周末都是一样的节奏。上午睡觉，一本书一杯茶或者咖啡过一个下午，偶尔去公司加加班。工作日每天起床上班，下班看看书，看看电影。时间就这样一天一天的流逝，似水无痕。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;去年的这个时候，喜欢看励志的书；现在发现已经不太喜欢这一类的书了。越来越喜欢国学，感谢南怀瑾先生，在南怀瑾先生的文字里，感悟了很多。最近在看的是傅佩荣的《国学的天空》，感觉也还不错。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;吕建伟说：&amp;#8220;他看什么样层次的书籍和报刊杂志，就能知道他的眼界有多宽，发展有多少后劲&amp;#8221;。阅读口味的变化，也是心态的一种变化吧。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;去年刚毕业，踌躇满志，想抛头颅撒热血闯出一翻天地，那些励志的书正好对口味。随着不断深入地接触社会，心态也随之变化了。这个世界上有三种人：人手、人才、人物。不学习，只能是人手，这个世界唯一不缺的就是人手。夜深人静的时候也一直在想，我并不是什么天才、天之娇子，也没有一个大享老爸；我只是千千万万个经历18年求学之路，从农村出生想到城市立足的农民的儿子。 记得毕业的时候刘老师送我们这样一句话：&amp;#8220;别把自己太当回事，也别把自己不当回事&amp;#8221;，还有吴老师的：&amp;#8220;三十年前子敬父，三十年后父敬子&amp;#8221;。这个世界上有80%的都是平凡人，只有把自己的心态调整好，才可能立足于社会，才有可能出人头地。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;或许是对自己的定位更踏实了一些吧。南怀瑾《宗镜录略讲》：&amp;#8220;孔子讲自己的修养是：&amp;#8216;十五而志于学，三十而立，四十而不惑&amp;#8217;，你们六岁读幼稚园，孔子十五岁才立志读书。&amp;#8216;三十而立&amp;#8217;是说身体不大好，三十岁才站得起来吗？不是的，这是讲做人到三十岁而立定了宗旨，非向这条路上走不可，等于佛家讲发愿。十五岁志于学，经过十五年的犹疑、痛苦、煎熬、烦恼、矛盾，到了三十岁将中年阶段，才确定人生该走这条路。再加上十年修养、读书，&amp;#8216;四十而不惑&amp;#8217;，到了四十岁再不动心，没有怀疑了！&amp;#8216;五十而知天命&amp;#8217;，然后到了五十岁才入门，悟道了。&amp;#8216;六十而耳顺&amp;#8217;，耳朵顺了，两只耳朵又不是驴子，哪有不顺的？难道六十岁以前耳朵不好，到了六十岁才掏通？不是的。到了六十岁，善恶是非化得平了，真到了禅宗所谓的重关了。&amp;#8216;七十而从心所欲不逾矩&amp;#8217;，最后七十岁才算到了家。这是孔子对他一生的报告。&amp;#8221;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;人的一生就是这样不断学习、沉淀、反思、感悟的过程。只是想要清楚自己什么时候应该想要什么真的很难。我想，无论什么时候，得意也好失意也罢，心态都至关重要。在心态修炼这方面，这一年确实有不少的提高，对人对事的看法也更加客观了。解开了自己为自己设置的感情上的结，不再那么忧郁、纠结，这是最大的进步吧。放过对方也放过自己。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;这方面也感谢公司有这么好的一个氛围&amp;#8212;&amp;#8212;真诚。感谢XGY同学的指出我为人处事一些不妥的地方。我喜欢和能够指出我的缺点、甚至给我迎头棒吓的朋友交流，这方面很幸运有老鼠同学。虽然老鼠同学平时为人比较猥琐，但观察力很不错，也指出了我很多缺点和给了我很多建议。有这样的朋友，是我最大的财富。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;这一年多的工作中，在和同事沟通时也感觉到了自己在性格方面有一些弱点，自己也注意到了，慢慢地改变自己吧。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;最近看的书，主要都是修心养性和专业技能的了。经过这一年多的工作积累，对自己的知识体系也有了更好了解。毕业转行进入软件开发，对软件工程缺少一个系统的了解，知识体系也很零散。这10个月的时间，根据团队项目的实际情况再结合书本上的学到的知识，对项目管理、系统架构、实施也都有了一些更深刻的理解。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;专业领域方面，对操作系统的了解还是不够，数据库原理也比较薄弱。这两方面都要加强。这几个月一直在学习架构方面的知识，站在系统的角度去看曾经写的那些代码，体会确实不一样。原则、模式都是死人，项目是活的，人是活的；《观止》中描述的不少问题，在我们的团队中依然存在；《人月神话》会经典三十年也足以说明IT项目管理中的那些问题。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;那句墨菲法则很有意思：&amp;#8220;若一件事情有可能搞砸，那么它就一定会被搞砸。&amp;#8221;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;在软件工程里，有太多的东西和生活是一样的。比如：持续重构和改进好比是每个人都要经常反思自己改变自己；单一职责好比是我们没有那么多时间去关注和学习股票的知识，我们只需要买基金就好，至于其它的事就交给基金的运作人员。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;最近有这样一种感觉，不管什么事，本质上其实都一样的。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="font-family: Arial; line-height: 23px; font-size: 13px; "&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; 多看、多想、多悟。&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/moozi/aggbug/1853240.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/moozi/archive/2010/10/16/1853240.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/moozi/archive/2010/09/27/tfs2010-code-review.html</id><title type="text">基于TFS2010的代码审查环境部署</title><summary type="text">在TFS2010中集成代码审查，使用TeamReview插件将代码审核结果设置成工作项安排给团队成员调整。</summary><published>2010-09-27T04:20:00Z</published><updated>2010-09-27T04:20:00Z</updated><author><name>木子博客</name><uri>http://www.cnblogs.com/moozi/</uri></author><link rel="alternate" href="http://www.cnblogs.com/moozi/archive/2010/09/27/tfs2010-code-review.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/moozi/archive/2010/09/27/tfs2010-code-review.html"/><content type="html">&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 对于代码审查的重要性，这里不再多说。要做好代码审查，还是需要工具来配合才能做好。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 本文的配置环境如下：SQL Server 2008(TFS2010必须)，TFS2010(中文版)，Visual Studio 2010。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 代码审查的插件在codeplex上有一个&lt;span id="ctl00_ctl00_MasterContent_ProjectTitleControl1_TitleLabel"&gt;TeamReview非常不错，可以把代码审查的分配成工作项，安排给团队成员。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 先预览一下效果吧，有图有真相。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;1、走查代码时，选中可能存在问题的代码。右击，如图。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/moozi/teamreview1.jpg" width="666" height="120" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;2、选择&amp;#8220;New Code Item&amp;#8221;后，弹出如下窗口。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/moozi/teamreview2.jpg" width="613" height="514" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;备注：汉化插件的时候，不知道应该把"Query From"翻译成什么好，就只好保留这个了。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;这样就可以把这个代码片断设置为工作项安排给团队成员修改了。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span&gt;配置这个插件的步骤：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;从&lt;a href="http://teamreview.codeplex.com/"&gt;http://teamreview.codeplex.com/&lt;/a&gt;&amp;nbsp;下载TeamReview_2010_1_1_3，&lt;/span&gt;&lt;span style="color: red"&gt;如果你的TFS是中文版的，请下载我调整好的文件【&lt;a href="http://files.cnblogs.com/moozi/TeamReview_2010_1_1_3_modify_by_moozi.rar" target="_blank"&gt;&lt;span&gt;&lt;strong&gt;TeamReview_2010_1_1_3&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="color: red"&gt;】，否则官方给的源文件无法正确配置。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;1、解压完下载的文件后。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;2、导到工作项模板到TFS2010里。帮助文档可以查看：&lt;a href="http://msdn.microsoft.com/zh-cn/library/dd312129(VS.100).aspx"&gt;http://msdn.microsoft.com/zh-cn/library/dd312129(VS.100).aspx&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 进入&amp;nbsp; TFS安装盘驱动器:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE。如果你的TFS服务器上没有安装Visual Studio 2010，请找一台机子装有Visual Studio 2010的机子，把相同路径下的witadmin.exe拷贝到TFS服务器中。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TFS导入工作项模板的命令是：witadmin importwitd /collection:CollectionURL /p:Project /f:FileName /e:UTF-8，这里CollectionURL是TFS上的集合，Project是要导入的项目，FileName是模板所在的路径。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;例如，我的TFS服务器上有一个DefaultCollection集合，里面有一个Test项目，则运行如下命令：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; witadmin importwitd /collection:http://127.0.0.1:8080/tfs/DefaultCollection /p:CivilService /f:"C:\Documents and Settings\Administrator\桌面\TeamReview_2010_1_1_3\Code Item\Code Item zh.xml" /e:UTF-8&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; witadmin importwitd /collection:http://127.0.0.1:8080/tfs/DefaultCollection /p:CivilService /f:"C:\Documents and Settings\Administrator\桌面\TeamReview_2010_1_1_3\Code Review Response\Code Review Response zh.xml" /e:UTF-8&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 我们需要把压缩包里的"&lt;strong&gt;Code Item zh.xml&lt;/strong&gt;"和"&lt;strong&gt;Code Review Response zh.xml&lt;/strong&gt;"都导入到TFS中。"* zh.xml"是我做的汉化版，在TFS2010中文版中不能成功导入官方给的xml文件。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 到这里，针对TFS服务器的操作就结束了。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;3、在工作机上安装TeamReview_2010_1_1_3\setup.exe，它会为Visual Studio 2010安装一个插件。官方给的这个插件包中还是有语言问题，这个插件不能列出中文版TFS的用户，&lt;/span&gt;&lt;span&gt;&lt;strong&gt;需要用我提供的TeamReview.dll覆盖原来的dll&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;，文件路径在 TeamReview安装驱动器:\Program Files\TeamReview\TeamReview (2010)，覆盖的时候请先关闭Visual Studio 2010。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span&gt;做完这些工作后，就可以使用这个代码审查插件了。可以很方便的把这些内容安排成工作项分配下去。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;安排的工作项如下：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/moozi/teamreview3.jpg" width="452" height="368" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/moozi/aggbug/1836730.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/moozi/archive/2010/09/27/tfs2010-code-review.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/moozi/archive/2010/09/08/1821666.html</id><title type="text">IE CSS Bug Table</title><summary type="text">来自Alipay前端同仁已经为我们纠正了一些来自官方的错误，并重新整理成表，非常方便查阅。我这儿就直接收藏了。</summary><published>2010-09-08T10:15:00Z</published><updated>2010-09-08T10:15:00Z</updated><author><name>木子博客</name><uri>http://www.cnblogs.com/moozi/</uri></author><link rel="alternate" href="http://www.cnblogs.com/moozi/archive/2010/09/08/1821666.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/moozi/archive/2010/09/08/1821666.html"/><content type="html">&lt;p&gt;转自：&lt;a href="http://cssrainbow.cn/tutorials/xhtml-css/1360.html"&gt;http://cssrainbow.cn/tutorials/xhtml-css/1360.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;来自Alipay前端同仁已经为我们纠正了一些来自官方的错误，并重新整理成表，非常方便查阅。 &lt;p&gt;我这儿就直接收藏了。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;IE CSS Bug Table :&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;table border="0" cellspacing="0" cellpadding="0" width="625"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th height="35" colspan="2"&gt;问题&lt;/th&gt;&lt;th width="86"&gt;浏览器&lt;/th&gt;&lt;th width="93"&gt;DEMO&lt;/th&gt;&lt;th width="214"&gt;解决方法&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td colspan="5"&gt;&lt;strong&gt;Hacking Rules: &lt;/strong&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font: italic 12px georgia; font-size-adjust: none; font-stretch: normal; -x-system-font: none"&gt;property:all-ie\9; property:gte-ie8\0;*property:lte-ie7; +property:ie7; _property:ie6;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="32"&gt;1&lt;/td&gt;&lt;td width="200"&gt;input[button | submit] 不能用 margin:0 auto; 居中&lt;/td&gt;&lt;td&gt;IE8&lt;/td&gt;&lt;td&gt;&lt;a href="http://haslayout.net/demos/No-Auto-Margin-Center-on-Buttons-Inconsistency-Demo.html"&gt;&lt;font color="#3a76ad"&gt;bug&lt;/font&gt;&lt;/a&gt; | &lt;a href="http://haslayout.net/demos/No-Auto-Margin-Center-on-Buttons-Inconsistency-Fixed-Demo-CS.html"&gt;&lt;font color="#3a76ad"&gt;fixed&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;为input添加width&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;body{overflow:hidden;}没有去掉滚动条&lt;/td&gt;&lt;td&gt;IE6/7&lt;/td&gt;&lt;td&gt;&lt;a href="http://haslayout.net/demos/Document-Scrollbars-Overflow-Inconsistency-Demo.html"&gt;&lt;font color="#3a76ad"&gt;bug&lt;/font&gt;&lt;/a&gt; | &lt;a href="http://haslayout.net/demos/Document-Scrollbars-Overflow-Inconsistency-Fixed-Demo.html"&gt;&lt;font color="#3a76ad"&gt;fixed&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;设置html{overflow:hidden;}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;hasLayout的标签拥有高度&lt;/td&gt;&lt;td&gt;IE6/7&lt;/td&gt;&lt;td&gt;&lt;a href="http://haslayout.net/demos/Empty-Element-Height-Bug-Demo.html"&gt;&lt;font color="#3a76ad"&gt;bug&lt;/font&gt;&lt;/a&gt; | &lt;a href="http://haslayout.net/demos/Empty-Element-Height-Bug-Fixed-Demo.html"&gt;&lt;font color="#3a76ad"&gt;fixed&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;*height:0;&lt;br /&gt;_overflow:hidden;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;form&amp;gt;[hasLayout]元素有margin-left时，子元素中的[input | textarea] 出现2&amp;#215;margin-left&lt;/td&gt;&lt;td&gt;IE6/7&lt;/td&gt;&lt;td&gt;&lt;a href="http://haslayout.net/demos/Form-Control-Double-Margin-Bug-Demo.html"&gt;&lt;font color="#3a76ad"&gt;bug&lt;/font&gt;&lt;/a&gt; | &lt;a href="http://haslayout.net/demos/Form-Control-Double-Margin-Bug-Fixed-Demo.html"&gt;&lt;font color="#3a76ad"&gt;fixed&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;form &amp;gt; [hasLayout 元素]{margin-left:宽度;}&lt;br /&gt;form div{*margin-left:宽度&amp;#247;2;}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;当border-width有1条&amp;lt;边3条时被设置成dotted时，1px的边dotted显示成dashed&lt;/td&gt;&lt;td&gt;IE7&lt;/td&gt;&lt;td&gt;&lt;a href="http://haslayout.net/demos/IE7-1px-Dotted-Border-Appears-As-Dashed-Bug-Demo.html"&gt;&lt;font color="#3a76ad"&gt;bug&lt;/font&gt;&lt;/a&gt; | &lt;a href="http://haslayout.net/demos/IE7-1px-Dotted-Border-Appears-As-Dashed-Bug-Fixed-Demo.html"&gt;&lt;font color="#3a76ad"&gt;fixed&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;不在同一个元素上使用不同宽度的 dotted&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;当子元素有position:relative的时候，父元素设置overflow:[hidden|auto]相当于给子元素设置了position:visible;&lt;/td&gt;&lt;td&gt;IE6/7&lt;/td&gt;&lt;td&gt;&lt;a href="http://haslayout.net/demos/relative-overflow-failure-bug-demo.html"&gt;&lt;font color="#3a76ad"&gt;bug&lt;/font&gt;&lt;/a&gt; | &lt;a href="http://haslayout.net/demos/relative-overflow-failure-bug-demo-fixed.html"&gt;&lt;font color="#3a76ad"&gt;fixed&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;给父元素设置position:relative;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;:hover伪类不能改变有position:absolute的子级元素的left/top值&lt;/td&gt;&lt;td&gt;IE7&lt;/td&gt;&lt;td&gt;&lt;a href="http://haslayout.net/demos/ie7-broken-hover-absolute-bug-demo.html"&gt;&lt;font color="#3a76ad"&gt;bug&lt;/font&gt;&lt;/a&gt; | &lt;a href="http://haslayout.net/demos/ie7-broken-hover-absolute-bug-demo-fixed.html"&gt;&lt;font color="#3a76ad"&gt;fixed&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;把top/left的值设置成除0%外的所有百分值；或添加一个margin-[所有方向]除0外的所有值，包括0%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;:focus + selector {} 选择器失效&lt;/td&gt;&lt;td&gt;IE8&lt;/td&gt;&lt;td&gt;&lt;a href="http://haslayout.net/demos/ignored-focus-bug-demo.html"&gt;&lt;font color="#3a76ad"&gt;bug&lt;/font&gt;&lt;/a&gt; | &lt;a href="http://haslayout.net/demos/ignored-focus-bug-demo-fixed.html"&gt;&lt;font color="#3a76ad"&gt;fixed&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;在失效选择器后面添加一个空选择器, :focus{}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;列表中混乱的浮动：在list中浮动图片时，图片出现溢出正常位置；或没有list-style&lt;/td&gt;&lt;td&gt;IE8&lt;/td&gt;&lt;td&gt;&lt;a href="http://haslayout.net/demos/image-float-bullet-chaos-demo.html"&gt;&lt;font color="#3a76ad"&gt;bug&lt;/font&gt;&lt;/a&gt; | &lt;a href="http://haslayout.net/demos/image-float-bullet-chaos-demo-fixed.html"&gt;&lt;font color="#3a76ad"&gt;fixed&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;用背景图片替换list-style&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;th 不会自动继承上级元素的 text-align&lt;/td&gt;&lt;td&gt;IE8&lt;/td&gt;&lt;td&gt;&lt;a href="http://haslayout.net/demos/non-inherited-th-text-align-bug-demo.html"&gt;&lt;font color="#3a76ad"&gt;bug&lt;/font&gt;&lt;/a&gt; | &lt;a href="http://haslayout.net/demos/non-inherited-th-text-align-bug-demo-fixed.html"&gt;&lt;font color="#3a76ad"&gt;fixed&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;给th添加text-align:inherit;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;样式(包括link/style/@import(link)) 最多允许个为是：32&lt;/td&gt;&lt;td&gt;IE6-8&lt;/td&gt;&lt;td&gt;&amp;#9472; 常识&lt;/td&gt;&lt;td&gt;99.99%的情况下，不会遇到&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;:hover 时若background-color为#fff, 失效&lt;/td&gt;&lt;td&gt;IE7&lt;/td&gt;&lt;td&gt;&lt;a href="http://haslayout.net/demos/hover-white-background-ignore-bug.html"&gt;&lt;font color="#3a76ad"&gt;bug&lt;/font&gt;&lt;/a&gt; | &lt;a href="http://haslayout.net/demos/hover-white-background-ignore-bug-fixed-demo.html"&gt;&lt;font color="#3a76ad"&gt;fixed&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;把background-color改成background。或者，非#fff || #ffffff&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;13&lt;/td&gt;&lt;td&gt;忽略&amp;#8217;&amp;gt;&amp;#8217;后有注释的选择器：selector&amp;gt; /**/ selector{}&lt;/td&gt;&lt;td&gt;IE7&lt;/td&gt;&lt;td&gt;&lt;a href="http://haslayout.net/demos/ie7-child-selector-comment-bug-demo.html"&gt;&lt;font color="#3a76ad"&gt;bug&lt;/font&gt;&lt;/a&gt; | &lt;a href="http://haslayout.net/demos/ie7-child-selector-comment-bug-demo.html"&gt;&lt;font color="#3a76ad"&gt;fixed&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;官方DEMO有误&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;14&lt;/td&gt;&lt;td&gt;* html&lt;/td&gt;&lt;td&gt;IE6&lt;/td&gt;&lt;td&gt;&amp;#9472; HACK&lt;/td&gt;&lt;td&gt;只对IE6有效&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;15&lt;/td&gt;&lt;td&gt;PNG图片中的颜色和背景颜色的值相同，但显示不同&lt;/td&gt;&lt;td&gt;IE6-7&lt;/td&gt;&lt;td&gt;&lt;a href="http://haslayout.net/demos/png-color-mismatch-demo.html"&gt;&lt;font color="#3a76ad"&gt;bug&lt;/font&gt;&lt;/a&gt; | &lt;a href="http://haslayout.net/demos/png-color-mismatch-demo-fixed.html"&gt;&lt;font color="#3a76ad"&gt;fixed&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;利用 &lt;a href="http://pmt.sourceforge.net/pngcrush/"&gt;&lt;font color="#3a76ad"&gt;pngcrush&lt;/font&gt;&lt;/a&gt; 去除图片中的 Gamma profiles&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;margin:0 auto; 不能让block元素水平居中&lt;/td&gt;&lt;td&gt;IE6-8&lt;/td&gt;&lt;td&gt;&lt;a href="http://haslayout.net/demos/no-auto-margin-center-pseudo-bug-demo.html"&gt;&lt;font color="#3a76ad"&gt;bug&lt;/font&gt;&lt;/a&gt; | &lt;a href="http://haslayout.net/demos/no-auto-margin-center-pseudo-bug-demo-fixed.html"&gt;&lt;font color="#3a76ad"&gt;fixed&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;给block元素添加一个width&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;17&lt;/td&gt;&lt;td&gt;使用伪类 :first-line | :first-letter, 属性的值中出现!important 会使属性失效&lt;/td&gt;&lt;td&gt;IE8&lt;/td&gt;&lt;td&gt;&lt;a href="http://haslayout.net/demos/ie8-first-line-important-bug.html"&gt;&lt;font color="#3a76ad"&gt;bug&lt;/font&gt;&lt;/a&gt; | &lt;a href="http://haslayout.net/demos/ie8-first-line-important-bug-fixed.html"&gt;&lt;font color="#3a76ad"&gt;fixed&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;!important is evil, don&amp;#8217;t use it anymore&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;18&lt;/td&gt;&lt;td&gt;:first-letter 失效&lt;/td&gt;&lt;td&gt;IE6&lt;/td&gt;&lt;td&gt;&lt;a href="http://haslayout.net/demos/ie6-first-letter-ignore-bug.html"&gt;&lt;font color="#3a76ad"&gt;bug&lt;/font&gt;&lt;/a&gt; | &lt;a href="http://haslayout.net/demos/ie6-first-letter-ignore-bug-fixed.html"&gt;&lt;font color="#3a76ad"&gt;fixed&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;把 :first-letter 移到离{}最近的地方，如 h1, p:first-letter{}，而非 p:first-letter h1{}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;19&lt;/td&gt;&lt;td&gt;Position:absolute元素中，a display:block, 在非:hover时只有文本可点击&lt;/td&gt;&lt;td&gt;IE6/7&lt;/td&gt;&lt;td&gt;&lt;a href="http://haslayout.net/demos/partial-click-v2-demo.html"&gt;&lt;font color="#3a76ad"&gt;bug&lt;/font&gt;&lt;/a&gt; | &lt;a href="http://haslayout.net/demos/partial-click-v2-demo-fixed.html"&gt;&lt;font color="#3a76ad"&gt;fixed&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;给a添加background, 如果背景透明，使用background:url(&amp;#8216;任何页面中已经缓存的文件链接&amp;#8217;)，不推荐background：url(#)[&lt;a href="http://haslayout.net/css/Partial-Click-Bug-v2"&gt;&lt;font color="#3a76ad"&gt;官方的解决方法&lt;/font&gt;&lt;/a&gt;]，因为会增加一下HTTP请求&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;float列表元素不水平对齐：li不设置float，a设置display:block;float:[方向]，li不水平对齐&lt;/td&gt;&lt;td&gt;IE6/7&lt;/td&gt;&lt;td&gt;&lt;a href="http://haslayout.net/demos/staircase-bug-demo.html"&gt;&lt;font color="#3a76ad"&gt;bug&lt;/font&gt;&lt;/a&gt; | &lt;a href="http://haslayout.net/demos/staircase-bug-demo-fixed.html"&gt;&lt;font color="#3a76ad"&gt;fixed&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;给li设置display:inline 或 float:[方向]&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;21&lt;/td&gt;&lt;td&gt;dt, dd, li 背景失效&lt;/td&gt;&lt;td&gt;IE6&lt;/td&gt;&lt;td&gt;&lt;a href="http://haslayout.net/demos/disappearing-list-background-bug-demo.html"&gt;&lt;font color="#3a76ad"&gt;bug&lt;/font&gt;&lt;/a&gt; | &lt;a href="http://haslayout.net/demos/disappearing-list-background-bug-demo-fixed.html"&gt;&lt;font color="#3a76ad"&gt;fixed&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;dt, dd, li{position:relative;}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;22&lt;/td&gt;&lt;td&gt;&amp;lt;noscript /&amp;gt;元素的样式在启用javascript的情况下显示了样式&lt;/td&gt;&lt;td&gt;IE6-8&lt;/td&gt;&lt;td&gt;&lt;a href="http://haslayout.net/demos/noscript-ghost-bug-demo.html"&gt;&lt;font color="#3a76ad"&gt;bug&lt;/font&gt;&lt;/a&gt; | &lt;a href="http://haslayout.net/demos/noscript-ghost-bug-demo-fixed.html"&gt;&lt;font color="#3a76ad"&gt;fixed&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;利用js给&amp;lt;noscript /&amp;gt;添加display:none;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;23&lt;/td&gt;&lt;td&gt;使用filter处理的透明背景图片的透明部分不可点&lt;/td&gt;&lt;td&gt;IE6-8&lt;/td&gt;&lt;td&gt;&lt;a href="http://haslayout.net/demos/no-transparency-click-bug-demo.html"&gt;&lt;font color="#3a76ad"&gt;bug&lt;/font&gt;&lt;/a&gt; | &lt;a href="http://haslayout.net/demos/no-transparency-click-bug-demo-fixed.html"&gt;&lt;font color="#3a76ad"&gt;fixed&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;把background:none变成background:url(&amp;#8216;链接&amp;#8217;)，链接到本身和图片之外的任何文件&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;24&lt;/td&gt;&lt;td&gt;li内元素偏离 baseline 向下拉&lt;/td&gt;&lt;td&gt;IE8&lt;/td&gt;&lt;td&gt;&lt;a href="http://haslayout.net/demos/list-drop-shift-bug-demo.html"&gt;&lt;font color="#3a76ad"&gt;bug&lt;/font&gt;&lt;/a&gt; | &lt;a href="http://haslayout.net/demos/list-drop-shift-bug-demo-fixed.html"&gt;&lt;font color="#3a76ad"&gt;fixed&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;给li设置display:inline 或 float:[方向]&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;25&lt;/td&gt;&lt;td&gt;列表中li的list-style不显示&lt;/td&gt;&lt;td&gt;IE6/7&lt;/td&gt;&lt;td&gt;&lt;a href="http://haslayout.net/demos/no_li_ol_bullets_demo.html"&gt;&lt;font color="#3a76ad"&gt;bug&lt;/font&gt;&lt;/a&gt; | &lt;a href="http://haslayout.net/demos/no_li_ol_bullets_demo_fixed.html"&gt;&lt;font color="#3a76ad"&gt;fixed&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;给li添加margin-left，留空间来显示（不要加在ul上）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;26&lt;/td&gt;&lt;td&gt;图片不能垂直居中&lt;/td&gt;&lt;td&gt;IE6/7&lt;/td&gt;&lt;td&gt;&lt;a href="http://haslayout.net/css/No-line-height-Vertical-Center-on-Images-Bug"&gt;&lt;font color="#3a76ad"&gt;bug/fixed&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;添加一个空标签，并赋给&amp;#8221;Layout&amp;#8221;, 比如display:inline-block;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;27&lt;/td&gt;&lt;td&gt;不能自定义指针样式&lt;/td&gt;&lt;td&gt;IE6-8&lt;/td&gt;&lt;td&gt;&lt;a href="http://haslayout.net/demos/cursor/a/demo.html"&gt;&lt;font color="#3a76ad"&gt;bug&lt;/font&gt;&lt;/a&gt; | &lt;a href="http://haslayout.net/demos/cursor/a/demo_fixed.html"&gt;&lt;font color="#3a76ad"&gt;fixed&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;给指针文件设置绝对路径&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;28&lt;/td&gt;&lt;td&gt;背景溢出，拖动滚动条后显示正常&lt;/td&gt;&lt;td&gt;IE6&lt;/td&gt;&lt;td&gt;&lt;a href="http://haslayout.net/demos/backgroundleak_demo.html"&gt;&lt;font color="#3a76ad"&gt;bug&lt;/font&gt;&lt;/a&gt; | &lt;a href="http://haslayout.net/demos/backgroundleak_demo_ls_fixed.html"&gt;&lt;font color="#3a76ad"&gt;fixed&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;给父元素添加overflow:hidden防止溢出，并赋予hasLayout,如果添加_zoom:1;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;29&lt;/td&gt;&lt;td&gt;高度超过height定义的高&lt;/td&gt;&lt;td&gt;IE6&lt;/td&gt;&lt;td&gt;&lt;a href="http://haslayout.net/css/Expanding-Height-Bug"&gt;&lt;font color="#3a76ad"&gt;bug/fixed&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;添加_overflow:hidden;(推荐)或者_font-size:0;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;30&lt;/td&gt;&lt;td&gt;宽度超过width定义的宽&lt;/td&gt;&lt;td&gt;IE6&lt;/td&gt;&lt;td&gt;&lt;a href="http://haslayout.net/css/Expanding-Width-Bug"&gt;&lt;font color="#3a76ad"&gt;bug/fixed&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;添加_overflow:hidden;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;31&lt;/td&gt;&lt;td&gt;双倍边距&lt;/td&gt;&lt;td&gt;IE6&lt;/td&gt;&lt;td&gt;&amp;#9472; 常识&lt;/td&gt;&lt;td&gt;添加display:inline到float元素中&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;32&lt;/td&gt;&lt;td&gt;margin负值隐藏：hasLayout的父元素内的非hasLayout元素，使用负边距时，超出父元素部分不可见&lt;/td&gt;&lt;td&gt;IE6/7&lt;/td&gt;&lt;td&gt;&lt;a href="http://haslayout.net/css/Negative-Margin-Bug"&gt;&lt;font color="#3a76ad"&gt;bug/fixed&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;去掉父元素的hasLayout；或者赋hasLayout给子元素,并添加position:relative;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;33&lt;/td&gt;&lt;td&gt;给两个浮动元素的某中一个的文字设定为斜体，另一个元素下拉在有斜体文字元素的下面&lt;/td&gt;&lt;td&gt;IE6&lt;/td&gt;&lt;td&gt;&lt;a href="http://haslayout.net/css/Italics-Float-Bug"&gt;&lt;font color="#3a76ad"&gt;bug/fixed&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;给有斜体文字的元素添加overflow:hidden;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;34&lt;/td&gt;&lt;td&gt;3px 间隔：在float元素后的元素，会有3px间隔&lt;/td&gt;&lt;td&gt;IE6&lt;/td&gt;&lt;td&gt;&lt;a href="http://haslayout.net/css/3px-Gap-Bug-aka-Text-Jog-Bug"&gt;&lt;font color="#3a76ad"&gt;bug/fixed&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;因为是确切的3px，所以，用&amp;#8221;暴力破解&amp;#8221;吧，比如_margin-left:-3px;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;35&lt;/td&gt;&lt;td&gt;text-align 影响块级元素&lt;/td&gt;&lt;td&gt;IE6/7&lt;/td&gt;&lt;td&gt;&lt;a href="http://haslayout.net/css/Text-Align-Bug"&gt;&lt;font color="#3a76ad"&gt;bug/fixed&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;整理你的float；或者分开设置text-align&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;36&lt;/td&gt;&lt;td&gt;button的padding双倍的BUG&lt;/td&gt;&lt;td&gt;IE6/7&lt;/td&gt;&lt;td&gt;&lt;a href="http://haslayout.net/css/Text-Align-Bug"&gt;&lt;font color="#3a76ad"&gt;&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;使用overflow:visible;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/moozi/aggbug/1821666.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/moozi/archive/2010/09/08/1821666.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
