<?xml version="1.0" encoding="UTF-8"?>
  <feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html"><![CDATA[零度の博客 - 程序源码]]></title>
  <subtitle type="html"><![CDATA[互联网信息大杂汇博客]]></subtitle>
  <id>http://www.80600.net/</id>
  <link rel="alternate" type="text/html" href="http://www.80600.net/" /> 
  <link rel="self" type="application/atom+xml" href="http://www.80600.net/atom.asp" /> 
  <generator uri="http://www.pjhome.net/" version="2.8">PJBlog3</generator> 
  <updated>2009-04-17T14:41:41+08:00</updated>

  <entry>
	  <title type="html"><![CDATA[C# 递归无限级树型菜单]]></title>
	  <author>
		 <name>MONO</name>
		 <uri>http://www.80600.net/</uri>
		 <email>P4Blog@qq.com</email>
	  </author>
	  <category term="" scheme="http://www.80600.net/default.asp?cateID=8" label="程序源码" /> 
	  <updated>2009-04-17T14:41:41+08:00</updated>
	  <published>2009-04-17T14:41:41+08:00</published>
		  <summary type="html"><![CDATA[<div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.80600.net/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;protected override void ShowPage()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataTable workTable = new DataTable(&#34;Customers&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataColumn workCol = workTable.Columns.Add(&#34;sortID&#34;, typeof(Int32));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;workCol.AllowDBNull = false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;workCol.AutoIncrement = true;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;workCol.AutoIncrementSeed = 1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;workCol.AutoIncrementStep = 1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;workCol.Unique = true;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;workTable.Columns.Add(&#34;sortName&#34;, typeof(String));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;workTable.Columns.Add(&#34;parentID&#34;, typeof(Int32));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;workTable.Columns.Add(&#34;level&#34;, typeof(Int32));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;workTable.Columns.Add(&#34;sortPath&#34;, typeof(String));<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataRow newRow = workTable.NewRow();<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newRow[&#34;sortName&#34;] = &#34;国产手机&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newRow[&#34;parentID&#34;] = &#34;0&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newRow[&#34;level&#34;] = &#34;0&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newRow[&#34;sortPath&#34;] = &#34;,1,&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;workTable.Rows.Add(newRow);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newRow = workTable.NewRow();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newRow[&#34;sortName&#34;] = &#34;国际手机&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newRow[&#34;parentID&#34;] = &#34;0&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newRow[&#34;level&#34;] = &#34;0&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newRow[&#34;sortPath&#34;] = &#34;,2,&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;workTable.Rows.Add(newRow);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newRow = workTable.NewRow();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newRow[&#34;sortName&#34;] = &#34;诺基亚&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newRow[&#34;parentID&#34;] = &#34;1&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newRow[&#34;level&#34;] = &#34;1&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newRow[&#34;sortPath&#34;] = &#34;,1,&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;workTable.Rows.Add(newRow);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newRow = workTable.NewRow();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newRow[&#34;sortName&#34;] = &#34;金立&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newRow[&#34;parentID&#34;] = &#34;2&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newRow[&#34;level&#34;] = &#34;1&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newRow[&#34;sortPath&#34;] = &#34;,2,&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;workTable.Rows.Add(newRow);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newRow = workTable.NewRow();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newRow[&#34;sortName&#34;] = &#34;5800XM&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newRow[&#34;parentID&#34;] = &#34;3&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newRow[&#34;level&#34;] = &#34;2&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newRow[&#34;sortPath&#34;] = &#34;,1,3,&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;workTable.Rows.Add(newRow);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newRow = workTable.NewRow();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newRow[&#34;sortName&#34;] = &#34;6100S&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newRow[&#34;parentID&#34;] = &#34;3&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newRow[&#34;level&#34;] = &#34;2&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newRow[&#34;sortPath&#34;] = &#34;,1,3,&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;workTable.Rows.Add(newRow);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newRow = workTable.NewRow();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newRow[&#34;sortName&#34;] = &#34;A4&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newRow[&#34;parentID&#34;] = &#34;4&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newRow[&#34;level&#34;] = &#34;2&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newRow[&#34;sortPath&#34;] = &#34;,2,4,&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;workTable.Rows.Add(newRow);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Text.StringBuilder sb = new System.Text.StringBuilder();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataRow[] rows = workTable.Sel&#101;ct(&#34;parentID=0&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach (DataRow dr in rows)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.AppendLine(&#34;&lt;div&gt;&#34; + dr[&#34;sortName&#34;] + &#34;（&#34; + dr[&#34;sortPath&#34;].ToString() + &#34;）&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.AppendLine(getSubNode(dr[&#34;sortID&#34;].ToString(), workTable));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.AppendLine(&#34;&lt;/div&gt;&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.Write(sb.ToString());<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private string getSubNode(string sortID, DataTable ATable)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Text.StringBuilder sb2 = new System.Text.StringBuilder();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataRow[] rows = ATable.Sel&#101;ct(&#34;[parentID]=&#34; + sortID);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach (DataRow dr in rows)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb2.AppendLine(&#34;&lt;li&gt;&#34; + dr[&#34;sortName&#34;] + &#34;（&#34; + dr[&#34;sortPath&#34;].ToString() + &#34;）&lt;/li&gt;&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb2.AppendLine(getSubNode(dr[&#34;sortID&#34;].ToString(), ATable));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return sb2.ToString();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/></div></div>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.80600.net/article.asp?id=346" /> 
	  <id>http://www.80600.net/default.asp?id=346</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[使用WebClient自动填写并提交ASP.NET页面表单]]></title>
	  <author>
		 <name>MONO</name>
		 <uri>http://www.80600.net/</uri>
		 <email>P4Blog@qq.com</email>
	  </author>
	  <category term="" scheme="http://www.80600.net/default.asp?cateID=8" label="程序源码" /> 
	  <updated>2009-02-06T11:00:18+08:00</updated>
	  <published>2009-02-06T11:00:18+08:00</published>
		  <summary type="html"><![CDATA[填写和提交以上表单的代码如下：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 要提交表单的URI字符串。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string uriString = &#34;<a href="http://www.xxx.com/Login.aspx" target="_blank" rel="external">http://www.xxx.com/Login.aspx</a>&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 要提交的字符串数据。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string postString = &#34;userName=user1&amp;password=password1&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 初始化WebClient<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebClient webClient = new WebClient();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; webClient.Headers.Add(&#34;Content-Type&#34;, &#34;application/x-www-form-urlencoded&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 将字符串转换成字节数组<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[] postData = Encoding.ASCII.GetBytes(postString);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 上传数据，返回页面的字节数组<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[] responseData = webClient.UploadData(uriString, &#34;POST&#34;, postData);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 返回的将字节数组转换成字符串(HTML)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string srcString = Encoding.UTF8.GetString(responseData);<br/>srcStrinig 就是提交表单后所返回页面的HTML。怎么样，很简单吧。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;但是，以上代码可以提交ASP或JSP生成的表单，却不能提交ASP.NET表单。因为提交ASP.NET表单时，必须给“__VIEWSTATE”和“__EVENTVALIDATION”赋值。“__VIEWSTATE”和“__EVENTVALIDATION”的值可以通过在要提交的页面上按右键“查看源文件”中找到。如下：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id=&#34;__VIEWSTATE&#34; value=&#34;/wEPDwUKMTg0NTgwMzM2M2RksjXHwIOzdq/skwDy1k6qTexm2j0=&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id=&#34;__EVENTVALIDATION&#34; value=&#34;/wEWBAKxhbOEAQKPpuq2CALyveCRDwLejM6fDwP2723lUdzBJVBIAVzbpM2sXYqc&#34; <br/>通过“查看源文件”得到的“__VIEWSTATE”和“__EVENTVALIDATION”的值还不能直接提交给表单，还需要转换成URL编码的字符串。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; viewState = System.Web.HttpUtility.UrlEncode(viewState);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eventValidation = System.Web.HttpUtility.UrlEncode(eventValidation);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;完整的代码如下：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 提交按钮的文本<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string submitButton = &#34;登录&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 页面的 VeiwState（可以通过IE打开页面，右键“查看源文件”取得）<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string viewState = &#34;/wEPDwUKMTg0NTgwMzM2M2RksjXHwIOzdq/skwDy1k6qTexm2j0=&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 页面的 EventValidation（可以通过IE打开页面，右键“查看源文件”取得）<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string eventValidation = &#34;/wEWBAKxhbOEAQKPpuq2CALyveCRDwLejM6fDwP2723lUdzBJVBIAVzbpM2sXYqc&#34;;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; submitButton = System.Web.HttpUtility.UrlEncode(submitButton);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; viewState = System.Web.HttpUtility.UrlEncode(viewState);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eventValidation = System.Web.HttpUtility.UrlEncode(eventValidation);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 要提交表单的URI字符串。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string uriString = &#34;<a href="http://www.xxx.com/Login.aspx" target="_blank" rel="external">http://www.xxx.com/Login.aspx</a>&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 要提交的字符串数据。格式形如:user=uesr1&amp;password=123<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string postString = &#34;userName=1&amp;password=1&#34; + &#34;&amp;loginButton=&#34; + submitButton + &#34;&amp;__VIEWSTATE=&#34; + viewState + &#34;&amp;__EVENTVALIDATION=&#34; + eventValidation;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 初始化WebClient<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebClient webClient = new WebClient();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; webClient.Headers.Add(&#34;Content-Type&#34;, &#34;application/x-www-form-urlencoded&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 将字符串转换成字节数组<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[] postData = Encoding.ASCII.GetBytes(postString);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 上传数据，返回页面的字节数组<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[] responseData = webClient.UploadData(uriString, &#34;POST&#34;, postData);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 将返回的将字节数组转换成字符串(HTML);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp; ASP.NET 返回的页面一般是Unicode,如果是简体中文应使用 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp; Encoding.GetEncoding(&#34;GB2312&#34;).GetString(responseData)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string srcString = Encoding.UTF8.GetString(responseData);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (WebException we)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string msg = we.Message;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 几点说明：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1)&nbsp;&nbsp;srcStrinig 是提交表单后所返回页面的HTML，可以使用正则表达式等来分析之，以获得你所需要的数据。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2)&nbsp;&nbsp;“__VIEWSTATE”和“__EVENTVALIDATION”的值不是不是一成不变的。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3)&nbsp;&nbsp;查看网页POST的数据还可以通过一些工具来查看，比如： 网页数据分析工具HttpWatch，网络嗅探器等。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4)&nbsp;&nbsp;如果提交的表单有验证码，则不在本文讨论的范围内。]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.80600.net/article.asp?id=344" /> 
	  <id>http://www.80600.net/default.asp?id=344</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[Sql Server 2005 怎样建立分区表 ]]></title>
	  <author>
		 <name>MONO</name>
		 <uri>http://www.80600.net/</uri>
		 <email>P4Blog@qq.com</email>
	  </author>
	  <category term="" scheme="http://www.80600.net/default.asp?cateID=8" label="程序源码" /> 
	  <updated>2009-01-10T12:07:08+08:00</updated>
	  <published>2009-01-10T12:07:08+08:00</published>
		  <summary type="html"><![CDATA[对数据库进行评估后，需要对大表进行分区，由以下步骤可完成整个分区过程。<br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.80600.net/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>/*<br/>建立分区表的步骤：<br/>1.建立数据库；<br/>2.新增文件组；<br/>3.为文件组新增文件；<br/>4.建立分区函数；<br/>5.建立分区架构（Scheme）；<br/>6.新增表格（引用分区架构）。<br/>*/<br/><br/>USE [MASTER]<br/>GO<br/><br/>-- STEP1:建立数据库<br/>IF EXISTS (Sel&#101;ct * FROM [master].[dbo].[sysdatabases] Wh&#101;re [name] = &#39;TestDemo&#39;)<br/>&#160;&#160;&#160;&#160;Dro&#112; DATABASE [TestDemo]<br/>GO<br/><br/>Cr&#101;ate DATABASE [TestDemo] ON PRIMARY <br/>(<br/>&#160;&#160;&#160;&#160;NAME = N&#39;TestDemo&#39;, FILENAME = N&#39;F:\TestDataBase\Data\TestDemo.mdf&#39;, SIZE = 3072KB, MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB<br/>)<br/>LOG ON <br/>(<br/>&#160;&#160;&#160;&#160;NAME = N&#39;TestDemo_log&#39;, FILENAME = N&#39;F:\TestDataBase\Data\TestDemo_log.ldf&#39;, SIZE = 1024KB, MAXSIZE = 2048GB, FILEGROWTH = 10%<br/>)<br/>GO<br/><br/>USE [TestDemo]<br/>GO<br/><br/>-- STEP2:增加文件组<br/>Alt&#101;r DATABASE [TestDemo] ADD FILEGROUP MASTERFG1<br/>GO<br/><br/>Alt&#101;r DATABASE [TestDemo] ADD FILEGROUP MASTERFG2<br/>GO<br/><br/>Alt&#101;r DATABASE [TestDemo] ADD FILEGROUP MASTERFG3<br/>GO<br/><br/>Alt&#101;r DATABASE [TestDemo] ADD FILEGROUP MASTERFG4<br/>GO<br/><br/>-- STEP3:新增文件并与文件组关联<br/>Alt&#101;r DATABASE [TestDemo] ADD FILE (NAME = N&#39;MASTERF1&#39;, FILENAME = N&#39;F:\TestDataBase\FileGroup\MASTERF1.NDF&#39;) TO FILEGROUP MASTERFG1<br/>GO<br/><br/>Alt&#101;r DATABASE [TestDemo] ADD FILE (NAME = N&#39;MASTERF2&#39;, FILENAME = N&#39;F:\TestDataBase\FileGroup\MASTERF2.NDF&#39;) TO FILEGROUP MASTERFG2<br/>GO<br/><br/>Alt&#101;r DATABASE [TestDemo] ADD FILE (NAME = N&#39;MASTERF3&#39;, FILENAME = N&#39;F:\TestDataBase\FileGroup\MASTERF3.NDF&#39;) TO FILEGROUP MASTERFG3<br/>GO<br/><br/>Alt&#101;r DATABASE [TestDemo] ADD FILE (NAME = N&#39;MASTERF4&#39;, FILENAME = N&#39;F:\TestDataBase\FileGroup\MASTERF4.NDF&#39;) TO FILEGROUP MASTERFG4<br/>GO<br/><br/>-- STEP4:建立分区函数<br/>IF EXISTS(Sel&#101;ct * FROM [sys].[partition_functions] Wh&#101;re [name] = N&#39;MyPF1&#39;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;Dro&#112; PARTITION FUNCTION MyPF1<br/>GO<br/><br/>Cr&#101;ate PARTITION FUNCTION MyPF1(BIGINT) <br/>AS RANGE RIGHT <br/>FOR VALUES (N&#39;100000&#39;, N&#39;200000&#39;, N&#39;300000&#39;)<br/>GO<br/><br/>-- STEP5:建立分区架构<br/>If EXISTS(Sel&#101;ct * FROM [sys].[partition_schemes] Wh&#101;re [name] = N&#39;MyPS1&#39;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;Dro&#112; PARTITION SCHEME MyPS1<br/>GO<br/><br/>Cr&#101;ate PARTITION SCHEME MyPS1<br/>AS PARTITION MyPF1 <br/>TO (MASTERFG1, MASTERFG2, MASTERFG3, MASTERFG4)<br/>GO<br/><br/>-- STEP6:根据分区架构新建表格<br/>IF EXISTS (Sel&#101;ct * FROM [dbo].[sysobjects] Wh&#101;re [ID] = OBJECT_ID(N&#39;[dbo].[TestMaster]&#39;) AND OBJECTPROPERTY([id], N&#39;IsUserTable&#39;) = 1)<br/>&nbsp;&nbsp; Dro&#112; TABLE [dbo].[TestMaster]<br/>GO<br/><br/>Cr&#101;ate TABLE [dbo].[TestMaster]<br/>(<br/>&#160;&#160;&#160;&#160;[AutoId] BIGINT IDENTITY(1,1) NOT NULL,<br/>&#160;&#160;&#160;&#160;[Text] VARCHAR (MAX) NULL CONSTRAINT [DF_TestMaster_Text] DEFAULT (N&#39;有些程序员在撰写数据库应用程序时，常专注于 OOP 及各种 framework 的使用，却忽略了基本的 SQL 语句及其「性能 (performance) 优化」问题。版工曾听过台湾某半导体大厂的新进程序员，所组出来的一段 PL/SQL 跑了好几分钟还跑不完；想当然尔，即使他的 AJAX 及 ooxx 框架用得再漂亮，系统性能也会让使用者无法忍受。以下是版工整理出的一些数据库规划、SQL performance tuning 简单心得，让长年钻研 .NET、AJAX、一堆高深 ooxx framework，却无暇研究 SQL statement 的程序员，透过最短时间对本帖的阅读，能避免踩到一些 SQL 的性能地雷。(注：本帖的 SQL 语句皆经过测试可正常执行无误。有兴趣实验者，可直接拷贝后，粘贴至 SQL Server 中执行。)1、数据库设计与规划 • Primary Key 字段的长度尽量小，能用 small integer 就不要用 integer。例如员工数据表，若能用员工编号当主键，就不要用身分证号码。• 一般字段亦同。若该数据表要存放的数据不会超过 3 万笔，用 small integer 即可，不必用 integer。• 文字字段若长度固定，如：身分证号码，就不要用 varchar 或 nvarchar，应该用 char 或 nchar。• 文字字段若长度不固定，如：地址，则该用 varchar 或 nvarchar。除了可节省存储空间外，存取硬盘时也会较有效率。• 设计字段时，若其值可有可无，最好也给一个默认值，并设成「不允许 NULL」(一般字段默认为「允许 NULL」)。因为 SQL Server 在存放和查询有 NULL 的数据表时，会花费额外的运算动作 [2]。• 若一个数据表的字段过多，应垂直切割成两个以上的数据表，并可用同名的 Primary Key 一对多连结起来，如：Northwind 的 o&#114;ders、Order Details 数据表。以避免在存取数据时，以「集簇索引 (clustered index)」扫描时会加载过多的数据，或修改数据时造成互相锁定或锁定过久。------------------------------2、适当地建立索引• 记得自行帮 Foreign Key 字段建立索引，即使是很少被 JOIN 的数据表亦然。• 替常被查询或排序的字段建立索引，如：常被当作 Wh&#101;re 子句条件的字段。• 用来建立索引的字段，长度不宜过长，不要用超过 20 个 Byte 的字段，如：地址。• 不要替内容重复性高的字段建立索引，如：性别；反之，若重复性低的字段则适合建立索引，如：姓名。• 不要替使用率低的字段建立索引，以免浪费硬盘空间。• 不宜替过多字段建立索引，否则反而会影响到「Ins&#101;rt、Up&#100;ate、Del&#101;te」的性能，尤其是以「OLTP (联机事务处理；在线交易)」为主的网站数据库。• 若数据表存放的数据很少，就不必刻意建立索引。否则可能数据库沿着存放索引的「树状结构」(Balanced Tree) 去搜寻索引中的数据，反而比扫描整个数据表还慢。• 若查询时符合条件的数据很多，则透过「非集簇索引 (non-clustered index)」搜寻的性能，反而 可能不如整个数据表逐笔扫描。• 建立「集簇索引」的字段选择至为重要，会影响到整个索引结构的性能。要用来建立「集簇索引」的字段，务必选择「整数」类型 (键值会较小)、唯一、不可为 NULL。&#39;),<br/>&#160;&#160;&#160;&#160;[StartTime] DATETIME NULL CONSTRAINT [DF_TestMaster_StartTime] DEFAULT (GETDATE()),<br/>&#160;&#160;&#160;&#160;CONSTRAINT [PK_TestMaster] PRIMARY KEY CLUSTERED <br/>&#160;&#160;&#160;&#160;(<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;[AutoId]<br/>&#160;&#160;&#160;&#160;) ON MyPS1([AutoId])<br/>)<br/>ON MyPS1([AutoId]) -- 此处特别注意，不是 PRIMARY。<br/>GO<br/><br/>IF EXISTS (Sel&#101;ct * FROM [dbo].[sysobjects] Wh&#101;re [ID] = OBJECT_ID(N&#39;[dbo].[TestMasterB]&#39;) AND OBJECTPROPERTY([id], N&#39;IsUserTable&#39;) = 1)<br/>&nbsp;&nbsp; Dro&#112; TABLE [dbo].[TestMasterB]<br/>GO<br/><br/>Cr&#101;ate TABLE [dbo].[TestMasterB]<br/>(<br/>&#160;&#160;&#160;&#160;[AutoId] BIGINT IDENTITY(1,1) NOT NULL,<br/>&#160;&#160;&#160;&#160;[Text] NVARCHAR (4000) NULL CONSTRAINT [DF_TestMasterB_Text] DEFAULT (N&#39;有些程序员在撰写数据库应用程序时，常专注于 OOP 及各种 framework 的使用，却忽略了基本的 SQL 语句及其「性能 (performance) 优化」问题。版工曾听过台湾某半导体大厂的新进程序员，所组出来的一段 PL/SQL 跑了好几分钟还跑不完；想当然尔，即使他的 AJAX 及 ooxx 框架用得再漂亮，系统性能也会让使用者无法忍受。以下是版工整理出的一些数据库规划、SQL performance tuning 简单心得，让长年钻研 .NET、AJAX、一堆高深 ooxx framework，却无暇研究 SQL statement 的程序员，透过最短时间对本帖的阅读，能避免踩到一些 SQL 的性能地雷。(注：本帖的 SQL 语句皆经过测试可正常执行无误。有兴趣实验者，可直接拷贝后，粘贴至 SQL Server 中执行。)1、数据库设计与规划 • Primary Key 字段的长度尽量小，能用 small integer 就不要用 integer。例如员工数据表，若能用员工编号当主键，就不要用身分证号码。• 一般字段亦同。若该数据表要存放的数据不会超过 3 万笔，用 small integer 即可，不必用 integer。• 文字字段若长度固定，如：身分证号码，就不要用 varchar 或 nvarchar，应该用 char 或 nchar。• 文字字段若长度不固定，如：地址，则该用 varchar 或 nvarchar。除了可节省存储空间外，存取硬盘时也会较有效率。• 设计字段时，若其值可有可无，最好也给一个默认值，并设成「不允许 NULL」(一般字段默认为「允许 NULL」)。因为 SQL Server 在存放和查询有 NULL 的数据表时，会花费额外的运算动作 [2]。• 若一个数据表的字段过多，应垂直切割成两个以上的数据表，并可用同名的 Primary Key 一对多连结起来，如：Northwind 的 o&#114;ders、Order Details 数据表。以避免在存取数据时，以「集簇索引 (clustered index)」扫描时会加载过多的数据，或修改数据时造成互相锁定或锁定过久。------------------------------2、适当地建立索引• 记得自行帮 Foreign Key 字段建立索引，即使是很少被 JOIN 的数据表亦然。• 替常被查询或排序的字段建立索引，如：常被当作 Wh&#101;re 子句条件的字段。• 用来建立索引的字段，长度不宜过长，不要用超过 20 个 Byte 的字段，如：地址。• 不要替内容重复性高的字段建立索引，如：性别；反之，若重复性低的字段则适合建立索引，如：姓名。• 不要替使用率低的字段建立索引，以免浪费硬盘空间。• 不宜替过多字段建立索引，否则反而会影响到「Ins&#101;rt、Up&#100;ate、Del&#101;te」的性能，尤其是以「OLTP (联机事务处理；在线交易)」为主的网站数据库。• 若数据表存放的数据很少，就不必刻意建立索引。否则可能数据库沿着存放索引的「树状结构」(Balanced Tree) 去搜寻索引中的数据，反而比扫描整个数据表还慢。• 若查询时符合条件的数据很多，则透过「非集簇索引 (non-clustered index)」搜寻的性能，反而 可能不如整个数据表逐笔扫描。• 建立「集簇索引」的字段选择至为重要，会影响到整个索引结构的性能。要用来建立「集簇索引」的字段，务必选择「整数」类型 (键值会较小)、唯一、不可为 NULL。&#39;),<br/>&#160;&#160;&#160;&#160;[StartTime] DATETIME NULL CONSTRAINT [DF_TestMasterB_StartTime] DEFAULT (GETDATE()),<br/>&#160;&#160;&#160;&#160;CONSTRAINT [PK_TestMasterB] PRIMARY KEY CLUSTERED <br/>&#160;&#160;&#160;&#160;(<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;[AutoId]<br/>&#160;&#160;&#160;&#160;) ON [PRIMARY]<br/>)<br/>ON [PRIMARY]<br/>GO<br/><br/>-- STEP7:往数据库中新增数据,查看数据库属性，可看到 PRIMARY 大小不变，而 FILEGROUP 文件增大。<br/>DECLARE @Index INT<br/><br/>SET @Index = 0<br/><br/>WHILE @Index &lt; 400000<br/>BEGIN<br/>&#160;&#160;&#160;&#160;SET @Index = @Index + 1<br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;Ins&#101;rt INTO [dbo].[TestMaster] ([StartTime]) VALUES (GETDATE())<br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;Ins&#101;rt INTO [dbo].[TestMasterb] ([StartTime]) VALUES (GETDATE())<br/>END<br/>GO<br/><br/>-- STEP7:创建分页查询采用分区表的数据库表存储过程<br/>IF EXISTS (Sel&#101;ct * FROM [dbo].[sysobjects] Wh&#101;re [id] = OBJECT_ID(N&#39;[dbo].[Test_GetTestMaster]&#39;) AND OBJECTPROPERTY([id], N&#39;IsProcedure&#39;) = 1)<br/>&#160;&#160;&#160;&#160;Dro&#112; PROCEDURE [dbo].[Test_GetTestMaster]<br/>GO<br/><br/>Cr&#101;ate PROCEDURE [dbo].[Test_GetTestMaster]<br/>@PageSize INT,<br/>@PageIndex INT<br/>AS<br/>BEGIN<br/>&#160;&#160;&#160;&#160;SET NOCOUNT ON;<br/><br/>&#160;&#160;&#160;&#160;Sel&#101;ct * FROM (<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Sel&#101;ct ROW_NUMBER() OVER (ORDER BY [AutoId] DESC) AS [Row], [AutoId], [Text], [StartTime] <br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;FROM [TestMaster]<br/>&#160;&#160;&#160;&#160;) AS TEMP Wh&#101;re [Row] <br/>&#160;&#160;&#160;&#160;BETWEEN ((@PageIndex - 1) * @PageSize + 1) AND (@PageIndex * @PageSize)<br/>END<br/>GO<br/><br/>-- STEP8:创建分页查询没有采用分区表的数据库表过程<br/>IF EXISTS (Sel&#101;ct * FROM [dbo].[sysobjects] Wh&#101;re [id] = OBJECT_ID(N&#39;[dbo].[Test_GetTestMasterB]&#39;) AND OBJECTPROPERTY([id], N&#39;IsProcedure&#39;) = 1)<br/>&#160;&#160;&#160;&#160;Dro&#112; PROCEDURE [dbo].[Test_GetTestMasterB]<br/>GO<br/><br/>Cr&#101;ate PROCEDURE [dbo].[Test_GetTestMasterB]<br/>@PageSize INT,<br/>@PageIndex INT<br/>AS<br/>BEGIN<br/>&#160;&#160;&#160;&#160;SET NOCOUNT ON;<br/><br/>&#160;&#160;&#160;&#160;Sel&#101;ct * FROM (<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Sel&#101;ct ROW_NUMBER() OVER (ORDER BY [AutoId] DESC) AS [Row], [AutoId], [Text], [StartTime] <br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;FROM [TestMasterB]<br/>&#160;&#160;&#160;&#160;) AS TEMP Wh&#101;re [Row] <br/>&#160;&#160;&#160;&#160;BETWEEN ((@PageIndex - 1) * @PageSize + 1) AND (@PageIndex * @PageSize)<br/>END<br/>GO<br/><br/>-- STEP9:执行采用分区表的数据库表过程<br/>EXEC [dbo].[Test_GetTestMaster] 10, 30000<br/>GO<br/><br/>-- STEP10:执行没有采用分区表的数据库表过程<br/>EXEC [dbo].[Test_GetTestMasterB] 10, 30000<br/>GO<br/></div></div>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.80600.net/article.asp?id=343" /> 
	  <id>http://www.80600.net/default.asp?id=343</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[C#制作鼠标可以穿透的窗体]]></title>
	  <author>
		 <name>MONO</name>
		 <uri>http://www.80600.net/</uri>
		 <email>P4Blog@qq.com</email>
	  </author>
	  <category term="" scheme="http://www.80600.net/default.asp?cateID=8" label="程序源码" /> 
	  <updated>2009-01-06T17:36:53+08:00</updated>
	  <published>2009-01-06T17:36:53+08:00</published>
		  <summary type="html"><![CDATA[最近看到有人问如何做一个“桌面天气秀”类似的软件，开始我以为做这个东西很复杂，因为觉得至少要传递Message给Desktop。但事实上，一试之后发现做这个程序竟然很简单。<br/><br/><br/>以下就把做的步骤列出来，供大家参考。<br/><br/>首先，需要设置窗体样式，这里面要设置的有：<br/><ul><li>设置FormBorderStyle为None；<br/></li><li>设置TopMost为false；<br/></li><li>设置ShowInTaskbar为false；<br/></li><li>为了能穿透桌面，要把BackColor设为White，在把TransparentKey设为White；<br/></li></ul><br/> <br/>这样，窗体的基本设置就完成了，为了显示要画的内容，则需要在窗体的Paint事件中去做，我这里所画的内容是显示当前月的所有天，相当于一个小日历。<br/><br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.80600.net/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>private void Draw( Graphics g )<br/><br/>{<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;const float REG_HEIGHT = 30f;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;const float START_POS_X = 0f;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;const float START_POS_Y = 0f;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;const int BLANK_SPACE_NUM = 5;<br/><br/> <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;// Draw day of week signal<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;RectangleF recRegion = new RectangleF( START_POS_X, START_POS_Y, <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(float)(this.Width), REG_HEIGHT );<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;const string FORMAT_STRING = &#34;{0}{1}{2}{3}{4}{5}{6}&#34;;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;string strDraw = string.Format( FORMAT_STRING,<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#34;SUN&#34;.PadLeft( BLANK_SPACE_NUM, &#39; &#39; ),<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#34;MON&#34;.PadLeft( BLANK_SPACE_NUM, &#39; &#39; ),<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#34;TUE&#34;.PadLeft( BLANK_SPACE_NUM, &#39; &#39; ),<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#34;WED&#34;.PadLeft( BLANK_SPACE_NUM, &#39; &#39; ),<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#34;THU&#34;.PadLeft( BLANK_SPACE_NUM, &#39; &#39; ),<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#34;FRI&#34;.PadLeft( BLANK_SPACE_NUM, &#39; &#39; ),<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#34;SAT&#34;.PadLeft( BLANK_SPACE_NUM, &#39; &#39; ) );<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;Font myFont = new Font( &#34;宋体&#34;, 11, FontStyle.Bold );<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;StringFormat sfDraw = new StringFormat();<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;sfDraw.Alignment = StringAlignment.Near;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;sfDraw.LineAlignment = StringAlignment.Far;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;Brush brDraw = new SolidBrush( Color.Wheat );<br/><br/> <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;g.DrawString( strDraw, myFont, brDraw, recRegion, sfDraw );<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;DateTime dtFirstDate = DateTime.Now.AddDays( 1 - DateTime.Now.Day );<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;int nStartIndex = (int)(dtFirstDate.DayOfWeek);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;nStartIndex++;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;TimeSpan tsDays = dtFirstDate.AddMonths( 1 ) - dtFirstDate;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;// Draw every day in this month<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;strDraw = &#34;&#34;;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;int i = 0;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;for( ; i &lt; tsDays.Days; i++ )<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch( dtFirstDate.AddDays( i ).DayOfWeek )<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case DayOfWeek.Sunday:<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case DayOfWeek.Monday:<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case DayOfWeek.Tuesday:<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case DayOfWeek.Wednesday:<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case DayOfWeek.Thursday:<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case DayOfWeek.Friday:<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strDraw += (i+1).ToString().PadLeft( BLANK_SPACE_NUM, &#39; &#39;);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case DayOfWeek.Saturday:<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strDraw += (i+1).ToString().PadLeft( BLANK_SPACE_NUM, &#39; &#39;);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strDraw = strDraw.PadLeft( BLANK_SPACE_NUM * 7, &#39; &#39; );<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;recRegion = new RectangleF( START_POS_X, <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;START_POS_Y + REG_HEIGHT * ( 1 + ( (i+1) + nStartIndex - 7 ) / 7 ), <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(float)(this.Width), REG_HEIGHT );<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.DrawString( strDraw, myFont, brDraw, recRegion, sfDraw );<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strDraw = &#34;&#34;;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/> <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;if( strDraw != &#34;&#34; )<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strDraw = strDraw.PadRight( BLANK_SPACE_NUM * 7, &#39; &#39; );<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;recRegion = new RectangleF( START_POS_X, <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;START_POS_Y + REG_HEIGHT * ( 1 + ( i + nStartIndex - 7 ) / 7 + 1 ), <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(float)(this.Width), REG_HEIGHT );<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.DrawString( strDraw, myFont, brDraw, recRegion, sfDraw );<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>}<br/><br/> <br/><br/>private void frmSprite_Paint(object sender, System.Windows.Forms.PaintEventArgs e)<br/><br/>{<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;Graphics g = e.Graphics;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;Draw( g );<br/><br/>}<br/><br/></div></div><br/>为了窗体能方便的退出，我加了一个NotifyIcon和ContextMenu来处理，具体如下。<br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.80600.net/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>private System.Windows.Forms.NotifyIcon ntfSprite;<br/><br/>private System.Windows.Forms.ContextMenu mnuContext;<br/><br/>private System.Windows.Forms.MenuItem mnuExit;<br/><br/>private void mnuExit_Click(object sender, System.EventArgs e)<br/><br/>{<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;this.Close();<br/><br/>}<br/><br/></div></div><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 本来以为自己的窗体放在Desktop之前，会影响窗体下Desktop的某些操作，但事实，这一点根本不用担心，因为.Net框架已经替你做了，因此你不用再调用API来传递消息。<br/><br/>如果想要所显示的窗体能够随意拖动，这可以参看我另外一篇文章：<br/><br/><a href="http://blog.csdn.net/knight94/archive/2006/04/14/663089.aspx" target="_blank" rel="external">http://blog.csdn.net/knight94/archive/2006/04/14/663089.aspx</a><br/><br/>以上的代码只是做了简单的测试，大家可以在我的基础上做扩展，例如调用Api来对当前进程作一些隐藏，设置窗体的起始位置，以及一些界面操作之类，放到启动菜单，这些都是可以完成的，我这里就不罗嗦了。]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.80600.net/article.asp?id=341" /> 
	  <id>http://www.80600.net/default.asp?id=341</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[SQL Server 本地数据库存储过程中执行远程数据库存储过程]]></title>
	  <author>
		 <name>MONO</name>
		 <uri>http://www.80600.net/</uri>
		 <email>P4Blog@qq.com</email>
	  </author>
	  <category term="" scheme="http://www.80600.net/default.asp?cateID=8" label="程序源码" /> 
	  <updated>2009-01-06T14:13:40+08:00</updated>
	  <published>2009-01-06T14:13:40+08:00</published>
		  <summary type="html"><![CDATA[<div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.80600.net/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>-- 参考：<a target="_blank" href="http://msdn.microsoft.com/zh-cn/vstudio/ms190479(SQL.90).aspx" rel="external">http://msdn.microsoft.com/zh-cn/vstudio/ms190479(SQL.90).aspx</a><br/><strong>EXECUTE sp_addlinkedserver &#39;srv_lnk&#39;, &#39;&#39;, &#39;SQLOLEDB&#39;, &#39;192.168.100.10&#39;</strong><br/><br/>-- 参考：<a href="http://msdn.microsoft.com/zh-cn/msdntv/ms189811.aspx" target="_blank" rel="external">http://msdn.microsoft.com/zh-cn/msdntv/ms189811.aspx</a> <br/><strong>EXECUTE sp_addlinkedsrvlogin &#39;srv_lnk&#39;, &#39;false&#39;, NULL, &#39;RegSQL&#39;, &#39;123456&#39;</strong><br/><br/>-- 参考：<a href="http://msdn.microsoft.com/zh-cn/library/ms178532.aspx" target="_blank" rel="external">http://msdn.microsoft.com/zh-cn/library/ms178532.aspx</a><br/><strong>EXECUTE sp_serveroption &#39;srv_lnk&#39;, &#39;rpc out&#39;, &#39;true&#39;<br/><br/>DECLARE&#160;&#160;&#160;&#160;@return_value int<br/>EXECUTE&#160;&#160;&#160;&#160;@return_value = [srv_lnk].[MailQueue].[dbo].[MQ_Up_RegisterEmail] @Email = &#39;P4Blog@126.com&#39;<br/>Sel&#101;ct &#39;Return Value&#39; = @return_value</strong><br/><br/>-- 参考：<a href="http://msdn.microsoft.com/zh-cn/netframework/ms174310.aspx" target="_blank" rel="external">http://msdn.microsoft.com/zh-cn/netframework/ms174310.aspx</a><br/><strong>EXECUTE sp_dro&#112;server &#39;srv_lnk&#39;, &#39;dro&#112;logins&#39;</strong><br/></div></div>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.80600.net/article.asp?id=340" /> 
	  <id>http://www.80600.net/default.asp?id=340</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[.Net Compact Framework 下的绘图闪烁解决方案 ]]></title>
	  <author>
		 <name>MONO</name>
		 <uri>http://www.80600.net/</uri>
		 <email>P4Blog@qq.com</email>
	  </author>
	  <category term="" scheme="http://www.80600.net/default.asp?cateID=8" label="程序源码" /> 
	  <updated>2008-12-23T16:25:24+08:00</updated>
	  <published>2008-12-23T16:25:24+08:00</published>
		  <summary type="html"><![CDATA[1：缓冲贴图<br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.80600.net/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>&nbsp;&nbsp; //重新绘制的函数&nbsp;&nbsp; <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; void Redraw() <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //直接从窗体取得Graphics <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Graphics g = this.Cr&#101;ateGraphics(); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Redraw(g); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g.Dispose(); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//缓冲图以及操作缓冲图所需要的设备上下文<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Bitmap tempBitmap; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Graphics tempGraphics; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void Redraw(Graphics g) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (tempBitmap == null) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tempBitmap = new Bitmap(this.Width, this.Height); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tempGraphics = Graphics.FromImage(tempBitmap); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //在这里对缓冲图进行重新绘制 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DrawTempBitmap(tempGraphics);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//将缓冲图直接贴到窗体上 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g.DrawImage(tempBitmap, 0, 0); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/></div></div><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;可以看到Redraw中的窗体Graphics是从窗体直接获得的，并不是从PaintEvent中得到的，这样的好处是，既可以在系统要求重绘的时候（比如出现窗体的切换，遮挡）在Onpaint中直接调用Redraw，而且在本窗体的业务功能运行中（比如出现图形的变换，擦除等等），要求主动绘制，也可以直接调用。<br/><br/>2：摒弃无效刷新<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; 一个区域,比如RECT,正常情况下是在活动窗口中的,你可以直接看的到,如果上面有一个窗口把这个区域覆盖了,那么这个区域就不是有效的了.变成无效的区域了.对于WINDOWS操作系统以及WinCE来说,当一个无效区域要面对用户的时候,它就会自动调用OnPaint进行刷新,用内存中的内容重新在界面上显示.使你看到的总是有效区域.&nbsp;&nbsp; 造成无效区域的方法很多,比如窗口覆盖,拖动,等等,如果你项强制你的区域刷新,比如你已经在这个区域更换了一幅图片之类.那么把这个要刷新的区域设置成无效区域,WINDOWS就会自动帮你刷新了。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;实现无效刷新，我们经常用到this.Invalidate（Rectangle）,这个函数，可是，在.NETCF下，这个函数的重载实现并不完美，效率也很低，被设定的无效区域Rectangle，会有很明显的闪烁（首先被涂白，然后再绘制），比较起使用1方法的直接重贴缓冲图，后者基本没有闪烁，用户体验更好。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;另外频繁的this.Invalidate或者通过this.refresh，被动的激活系统来进行重新绘制，往往会产生win32501Exception的系统异常，所以对于图形变换比较频繁的系统来说，尽量应该摒弃掉无效刷新这种方式 ]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.80600.net/article.asp?id=333" /> 
	  <id>http://www.80600.net/default.asp?id=333</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[C# WinForm中实现异形窗体/控件]]></title>
	  <author>
		 <name>MONO</name>
		 <uri>http://www.80600.net/</uri>
		 <email>P4Blog@qq.com</email>
	  </author>
	  <category term="" scheme="http://www.80600.net/default.asp?cateID=8" label="程序源码" /> 
	  <updated>2008-12-21T14:46:18+08:00</updated>
	  <published>2008-12-21T14:46:18+08:00</published>
		  <summary type="html"><![CDATA[制作异形窗体或控件的思路一般都是想办法生成一个region，然后设置给指定的窗口或控件。生成region的方法有很多，最常用的就是从一幅图片生成，把该图片中的透明色部分“抠”掉，剩下的部分作为一个region。设置窗口或控件的region可以用SetWindowRgn API，不过.NET framework封装了这个操作，在C#中只要对窗口或控件的Region属性赋值就可以了。<br/><br/>首先，是一个根据Bitmap对象生成Region的方法：<br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.80600.net/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>/// 取得一个图片中非透明色部分的区域。<br/>/// 取其区域的图片。<br/>/// 透明色。<br/>/// 图片中非透明色部分的区域<br/>private Region BmpRgn(Bitmap Picture, Color TransparentColor)<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;int nWidth = Picture.Width;<br/>&nbsp;&nbsp;&nbsp;&nbsp;int nHeight = Picture.Height;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Region rgn = new Region();<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;rgn.MakeEmpty();<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;bool isTransRgn;//前一个点是否在透明区<br/>&nbsp;&nbsp;&nbsp;&nbsp;Color curColor;//当前点的颜色<br/>&nbsp;&nbsp;&nbsp;&nbsp;Rectangle curRect = new Rectangle();<br/>&nbsp;&nbsp;&nbsp;&nbsp;curRect.Height = 1;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;int x = 0, y = 0;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;//逐像素扫描这个图片，找出非透明色部分区域并合并起来。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;for (y = 0; y &lt; nHeight; ++y)<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isTransRgn = true;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (x = 0; x &lt; nWidth; ++x)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curColor = Picture.GetPixel(x, y);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (curColor == TransparentColor || x == nWidth - 1)//如果遇到透明色或行尾<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (isTransRgn == false)//退出有效<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curRect.Width = x - curRect.X;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rgn.Union(curRect);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else//非透明色<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (isTransRgn == true)//进入有效区<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curRect.X = x;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curRect.Y = y;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}//if curColor<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isTransRgn = curColor == TransparentColor;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}//for x<br/>&nbsp;&nbsp;&nbsp;&nbsp;}//for y<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;return rgn;<br/>}<br/></div></div><br/>原理很简单，就是对该图片逐行扫描，在每一行中把那些非透明色的矩形（只有一个像素高）合并（union）到一个Region对象中，当扫描完整个图片，得到的也就是我们想要的Region了。这种算法在很多文章里都有介绍的。<br/><br/>有了region，下面就简单了：<br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.80600.net/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>this.Region = BmpRgn(new Bitmap(&#34;d:\\a.bmp&#34;), Color.FromArgb(0, 0, 0));<br/></div></div><br/>上面的代码就是把d:\a.bmp的轮廓作为主窗口的region的，假设该图片的背景黑色（Color.FromArgb(0, 0, 0）)。 <br/>其实不光是Form，任何控件都可以用这个方法设置Region，制作出异形控件。]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.80600.net/article.asp?id=332" /> 
	  <id>http://www.80600.net/default.asp?id=332</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[C# 控件前缀]]></title>
	  <author>
		 <name>MONO</name>
		 <uri>http://www.80600.net/</uri>
		 <email>P4Blog@qq.com</email>
	  </author>
	  <category term="" scheme="http://www.80600.net/default.asp?cateID=8" label="程序源码" /> 
	  <updated>2008-12-19T13:43:23+08:00</updated>
	  <published>2008-12-19T13:43:23+08:00</published>
		  <summary type="html"><![CDATA[<strong>控件命名规则</strong><br/>命名方法：<span style="color:Blue">控件名简写 + 英文描述(英文描述首字母大写)</span><br/><br/><strong>主要控件名简写对照表：</strong><br/><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 控件名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;简写</strong><ul style="list-style-type:decimal"><li>Label&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lbl<br/></li><li>TextBox&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txt<br/></li><li>Button&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;btn<br/></li><li>LinkButton&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lnkbtn<br/></li><li>ImageButton&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;imgbtn<br/></li><li>Dro&#112;DownList&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ddl<br/></li><li>ListBox&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lst<br/></li><li>DataGrid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dg<br/></li><li>DataList&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dl<br/></li><li>CheckBox&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chk<br/></li><li>CheckBoxList&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chkls<br/></li><li>RadioButton&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rdo<br/></li><li>RadioButtonList&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rdolt<br/></li><li>Image&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; img<br/></li><li>Panel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pnl<br/></li><li>Calender&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cld<br/></li><li>AdRotator&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ar<br/></li><li>Table&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tbl<br/></li><li>RequiredFieldValidator&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rfv<br/></li><li>CompareValidator&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cv<br/></li><li>RangeValidator&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rv<br/></li><li>RegularExpressionValidator&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rev<br/></li><li>ValidatorSummary&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vs<br/></li><li>CrystalReportViewer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rptvew<br/></li></ul>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.80600.net/article.asp?id=331" /> 
	  <id>http://www.80600.net/default.asp?id=331</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[C#多线程队列处理实例]]></title>
	  <author>
		 <name>MONO</name>
		 <uri>http://www.80600.net/</uri>
		 <email>P4Blog@qq.com</email>
	  </author>
	  <category term="" scheme="http://www.80600.net/default.asp?cateID=8" label="程序源码" /> 
	  <updated>2008-12-08T10:30:55+08:00</updated>
	  <published>2008-12-08T10:30:55+08:00</published>
		  <summary type="html"><![CDATA[运行图：<br/><img src="http://www.80600.net/attachments/month_0812/e2008128103031.jpg" border="0" alt=""/><br/><br/>C# 源程序：<br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.80600.net/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>using System;<br/>using System.Collections;<br/>using System.Collections.Generic;<br/>using System.Text;<br/>using System.Threading;<br/><br/>namespace ConsoleApplication1<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;class Program<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private static int runThread = 1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private static NoSortHashTable ht = new NoSortHashTable();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private const int amountThread = 51; //线程总量<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private static Semaphore s = new Semaphore(10, 50);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static void Main(string[] args)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;runThread = 1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int i = 1; i &lt; amountThread; i++)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread th = new Thread(WriteData);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;th.Name = &#34;thread&#34; + i;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;th.Start(i);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (!th.IsAlive)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;th.Abort();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (true)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (runThread &gt;= amountThread)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;\r\n&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ArrayList list = new ArrayList(ht.Keys);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.Sort();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach (DictionaryEntry de in ht)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(string.Format(&#34;{0}{1}&#34;, de.Key, de.Value));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadKey();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch (Exception ex)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(ex.Message + ex.StackTrace);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadKey();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private static void WriteData(object strThreadID)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.WaitOne();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.Clear();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;Please wait, is the first to run a thread {0} ......&#34;, strThreadID);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Console.WriteLine(&#34;{0} thread running .....&#34;, strThreadID);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//模拟执行<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Random ran = new Random();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int t = Convert.ToInt32(strThreadID) * ran.Next(1, 10) * 10;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.Sleep(t);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Console.WriteLine(&#34;Thread the end of the run {0}, waiting {1} seconds ......&#34;, Thread.CurrentThread.Name, t.ToString());<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ht.Add(Convert.ToInt32(strThreadID), string.Format(&#34;: Thread the end of the run {0}&#34;, Thread.CurrentThread.Name) + string.Format(&#34;, waiting {0} seconds ......&#34;, t.ToString()));<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;runThread++;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.Release();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch (Exception ex)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(ex.Message + ex.StackTrace);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadKey();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public class NoSortHashTable : Hashtable<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private ArrayList list = new ArrayList();<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public override void Add(object key, object value)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;base.Add(key, value);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.Add(key);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public override void Clear()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;base.Clear();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.Clear();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public override void Remove(object key)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;base.Remove(key);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.Remove(key);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public override ICollection Keys<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return list;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/></div></div>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.80600.net/article.asp?id=323" /> 
	  <id>http://www.80600.net/default.asp?id=323</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[C#下保留小数位数和变成%数 ]]></title>
	  <author>
		 <name>MONO</name>
		 <uri>http://www.80600.net/</uri>
		 <email>P4Blog@qq.com</email>
	  </author>
	  <category term="" scheme="http://www.80600.net/default.asp?cateID=8" label="程序源码" /> 
	  <updated>2008-12-08T10:20:07+08:00</updated>
	  <published>2008-12-08T10:20:07+08:00</published>
		  <summary type="html"><![CDATA[C#下如果显示保留小数位数，及百分号的解决方法:<br/><br/>1、用NumberFormatInfo类来解决.<br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.80600.net/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>System.Globalization.NumberFormatInfo provider = new System.Globalization.NumberFormatInfo();<br/><br/>provider.PercentDecimalDigits = 2;//小数点保留几位数.<br/>provider.PercentPositivePattern = 2;//百分号出现在何处.<br/>double result = (double)1 / 3;//一定要用double类型.<br/>Response.Write(result.ToString(&#34;P&#34;, provider));<br/></div></div><br/><br/>2、用toString方法. <br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.80600.net/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>public string getRate(double hcount, double task)<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string rValue;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string temp=&#34;&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (task == 0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;task = 1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;double db = (hcount / task) * 100;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (hcount &gt;= task)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rValue = &#34;100%&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rValue = db.ToString(&#34;#0.#0&#34;) + &#34;%&#34;; ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return rValue;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/></div></div><br/><br/><div class="UBBPanel codePanel"><div class="UBBTitle"><img src="http://www.80600.net/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>string str1 = String.Format(&#34;{0:N1}&#34;,56789); //result: 56,789.0<br/>string str2 = String.Format(&#34;{0:N2}&#34;,56789); //result: 56,789.00<br/>string str3 = String.Format(&#34;{0:N3}&#34;,56789); //result: 56,789.000<br/>string str8 = String.Format(&#34;{0:F1}&#34;,56789); //result: 56789.0<br/>string str9 = String.Format(&#34;{0:F2}&#34;,56789); //result: 56789.00<br/>string str11 =(56789 / 100.0).ToString(&#34;#.##&#34;); //result: 567.89<br/>string str12 =(56789 / 100).ToString(&#34;#.##&#34;); //result: 567 <br/></div></div>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.80600.net/article.asp?id=322" /> 
	  <id>http://www.80600.net/default.asp?id=322</id>
  </entry>	
		
</feed>
