• 7380 阅读
  • 18 回复

HTMLParser.net使用详解

视频在线上传+队列转换FLV+水印+捉图+修复+获时+转3GP(API语言不限,开视频站必备!)
HTMLParser是一个很好的html解析工具,其中一个比较实用的功能就是抽取纯文本。最近阔玩游戏准备实现网站内容的全文检索,需要进行html纯文本的抽取,但是使用google来搜索利用htmlparser抽取纯文本,虽然查询到很多网页,但是基本实现方法都千篇一律,没有一个比较完美的纯文本抽取解决办法。

下载:http://www.netomatix.com/Products/DocumentManagement/HTMLParserNet.aspx

本地下载:
c#htmlparser.rar (您是游客您没有权限下载)

另一测:
Html.zip (您是游客您没有权限下载)



使用小则,来源:http://2270991.blog.51cto.com/2260991/479215
using
System;        
using System.Collections.Generic;        
using System.ComponentModel;        
using System.Data;        
using System.Drawing;        
using System.Linq;        
using System.Text;        
using System.Windows.Forms;        
using Winista.Text.HtmlParser;        
using Winista.Text.HtmlParser.Lex;        
using Winista.Text.HtmlParser.Nodes;        
using Winista.Text.HtmlParser.Util;        
using Winista.Text.HtmlParser.Visitors;        
using Winista.Text.HtmlParser.Filters;        
using Winista.Text.HtmlParser.Tags;        
using Winista.Text.HtmlParser.Http;        
using System.Threading;        
using System.IO;        
using System.Net;        
namespace parsertitle        
{        
public partial class Form1 : Form        
       {        
public Form1()        
               {        
                       InitializeComponent();        
               }        
/// <summary>        
/// 该软件的功能实现你在Textbox1里输入一个网址,Textbox2里会返回该网页的标题        
/// 有点慢,您需要耐心等待        
/// </summary>        
/// <param name="sender"></param>        
/// <param name="e"></param>        
privatevoid button1_Click(object sender, EventArgs e)        
               {        
                       downhtml_1(textBox1 .Text );        
                    textBox2 .Text = tohtml(htmlText );        
               }        
string htmlText = "";        
privatestring downhtml_1(string WebUrl)//抓取网页源代码方法一        
               {        


try
                       {        

                               WebClient myWebClient = new WebClient();        
                               myWebClient.Encoding = System.Text.Encoding.Default;//获取和设置用于上载和下载字符串的encoding,默认值是default        
//myWebClient.Encoding = System.Text.Encoding.Default;        

                               htmlText = myWebClient.DownloadString(WebUrl);//将下载的资源付给字符串        

                       }        
catch (Exception ex)        
                       {        
                               MessageBox.Show(ex.Message);        
                       }        
if (htmlText.Trim() == "")        
                               htmlText = "失败!";        
return htmlText;        
               }        
privatestring tohtml( string str)        
               {        
string strParser = "";        
                       Lexer lexer1 = new Lexer(str );        
                       Parser parser1 = new Parser(lexer1);        
//Creates a TagNameFilter that accepts tags with the given name.        
                       NodeFilter filter_title1 = new TagNameFilter("TITLE");//TagNameFilter是NodeFilter的子类,用子类初始化NodeFilter对象        

//NodeList nodelistoftitle = parser1.Parse(filter_title1);//Parse方法将返回HTML文档包含的字符        
                       NodeList nodelistoftitle = parser1.ExtractAllNodesThatMatch(filter_title1);//此方法能实现同上的功能        
//int i = nodelistoftitle.Count;        
                       INode node_title1 = nodelistoftitle.ElementAt(0);        
string title1 = "";        
if (node_title1 != null)        
                       {        
                               title1 = node_title1.ToHtml();//Return the HTML for this node.        

                       }        
elsereturn "";        

                       Lexer lexer2 = new Lexer(title1);        
                       Parser parser_title1 = new Parser(lexer2);        
                       TextExtractingVisitor title_visitor1 = new TextExtractingVisitor();        
                       parser_title1.VisitAllNodesWith(title_visitor1);//遍历所有节点,提取纯文本;相当于游客进去转了一圈,他手里就得到了全部的信息        
                       strParser = title_visitor1.ExtractedText.ToString();//提取出所有的纯文本信息        
return strParser;        

               }        

privatevoid Form1_Load(object sender, EventArgs e)        
               {        
                       textBox1.Text = "http://www.sina.com";        
               }        
       }        
}    


您是游客您没有权限查看该图片


非常干净

这是原:
您是游客您没有权限查看该图片


实验使用:http://www.lougoo.com/FishFav/thread-646-1-1.aspx
本帖最后由 张小鱼 于 2011-02-14 16:43 编辑
小鱼的淘宝店铺-多多支持哇

Html2Rss

视频在线上传+队列转换FLV+水印+捉图+修复+获时+转3GP(API语言不限,开视频站必备!)

代码 复制 - 运行

using System;  
using System.IO;  
using System.Xml;  

namespace HtmlAgilityPack.Samples  
{  
 class Html2Rss  
 {  
  [STAThread]  
  static void Main(string[] args)  
  {  
   HtmlWeb hw = new HtmlWeb();  

   // we are going to use cache, for demonstration purpose only.  
   string cachePath = Path.GetFullPath(@".\cache");  
   if (!Directory.Exists(cachePath))  
   {  
    Directory.CreateDirectory(cachePath);  
   }  
   hw.CachePath = cachePath;  
   hw.UsingCache = true;  

   // set the following to true, if you don't want to use the Internet at all and if you are sure something is available in the cache (for testing purposes for example).  
//   hw.CacheOnly = true;  

   // this is the url we want to scrap  
   // note: you want to check Terms Of Services, Copyrights and other legal issues if you plan to use this for non personnal work.  
   string url = @"http://www.asp.net/Modules/MoreArticles.aspx?tabindex=0&mid=64";  

   // there are two methods to do the work  
   // 1st method: use XSLT  
   ElegantWay(hw, url);  

   // 2nd method: use C# code  
//   ManualWay(hw, url);  
  }  


  static void ElegantWay(HtmlWeb hw, string url)  
  {  
   string xslt = "www.asp.net.ToRss.xsl";  

   // copy the file so it exists aside the .exe  
   File.Copy(@"..\..\" + xslt, xslt, true);  

   // create an XML file  
   XmlTextWriter writer = new XmlTextWriter("rss.xml", System.Text.Encoding.UTF8);  

   // get an Internet resource and write it as an XML file, after an XSLT transormation  
   // if www.asp.net ever change its HTML format, just changes the XSL file. No need for recompilation.  
   hw.LoadHtmlAsXml(url, xslt, null, writer);  

   // cleanup  
   writer.Flush();  
   writer.Close();  
  }  

  static void ManualWay(HtmlWeb hw, string url)  
  {  
   // get the document from the Internet resource  
   HtmlDocument doc = hw.Load(url);  

   // we remarked all articles have discriminant target="_new" attribute.  
   HtmlNodeCollection hrefs = doc.DocumentNode.SelectNodes("//a[@href and @target='_new']");  
   if (hrefs == null)  
   {  
    return;  
   }  

   // create fake rss feed  
   XmlDocument rssDoc = new XmlDocument();  
   rssDoc.LoadXml("");  

   // add channel element and other information  
   XmlElement channel = rssDoc.CreateElement("channel");  
   rssDoc.FirstChild.NextSibling.AppendChild(channel);  

   XmlElement temp = rssDoc.CreateElement("title");  
   temp.InnerText = "ASP.Net articles scrap RSS feed";  
   channel.AppendChild(temp);  

   temp = rssDoc.CreateElement("link");  
   temp.InnerText = url;  
   channel.AppendChild(temp);  

   XmlElement item;  
   // browse each article  
   foreach(HtmlNode href in hrefs)  
   {  
    // get what's interesting for RSS  
    string link = href.Attributes["href"].Value;  
    string title = href.InnerText;  
    string description = null;  
    HtmlNode descNode = href.SelectSingleNode("../div/text()");  
    if (descNode != null)  
     description = descNode.InnerText;  

    // create XML elements  
    item = rssDoc.CreateElement("item");  
    channel.AppendChild(item);  

    temp = rssDoc.CreateElement("title");  
    temp.InnerText = title;  
    item.AppendChild(temp);  

    temp = rssDoc.CreateElement("link");  
    temp.InnerText = link;  
    item.AppendChild(temp);  

    // description is not always here  
    if ((description != null) && (description.Length >0))  
    {  
     temp = rssDoc.CreateElement("description");  
     temp.InnerText = description;  
     item.AppendChild(temp);  
    }  
   }  
   rssDoc.Save("rss.xml");  
  }  
 }  
}  




代码 复制 - 运行

using System;  

namespace HtmlAgilityPack.Samples  
{  
 class Html2Xml  
 {  
  [STAThread]  
  static void Main(string[] args)  
  {  
   HtmlDocument doc = new HtmlDocument();  
   doc.Load(@"..\..\mshome.htm");  
   doc.OptionOutputAsXml = true;  
   doc.Save("mshome.xml");  
  }  
 }  
}  




代码 复制 - 运行

using System;  
using System.IO;  

namespace HtmlAgilityPack.Samples  
{  
 class Html2Xml  
 {  
  [STAThread]  
  static void Main(string[] args)  
  {  
   Test();  
  }  

  static void Test()  
  {  
   HtmlToText htt = new HtmlToText();  
   string s = htt.Convert(@"..\..\mshome.htm");  
   StreamWriter sw = new StreamWriter("mshome.txt");  
   sw.Write(s);  
   sw.Flush();  
   sw.Close();  
  }  
 }  
}  

using System;  
using System.IO;  

namespace HtmlAgilityPack.Samples  
{  
 public class HtmlToText  
 {  
  public HtmlToText()  
  {  
  }  

  public string Convert(string path)  
  {  
   HtmlDocument doc = new HtmlDocument();  
   doc.Load(path);  

   StringWriter sw = new StringWriter();  
   ConvertTo(doc.DocumentNode, sw);  
   sw.Flush();  
   return sw.ToString();  
  }  

  public string ConvertHtml(string html)  
  {  
   HtmlDocument doc = new HtmlDocument();  
   doc.LoadHtml(html);  

   StringWriter sw = new StringWriter();  
   ConvertTo(doc.DocumentNode, sw);  
   sw.Flush();  
   return sw.ToString();  
  }  

  private void ConvertContentTo(HtmlNode node, TextWriter outText)  
  {  
   foreach(HtmlNode subnode in node.ChildNodes)  
   {  
    ConvertTo(subnode, outText);  
   }  
  }  

  public void ConvertTo(HtmlNode node, TextWriter outText)  
  {  
   string html;  
   switch(node.NodeType)  
   {  
    case HtmlNodeType.Comment:  
     // don't output comments  
     break;  

    case HtmlNodeType.Document:  
     ConvertContentTo(node, outText);  
     break;  

    case HtmlNodeType.Text:  
     // script and style must not be output  
     string parentName = node.ParentNode.Name;  
     if ((parentName == "script") || (parentName == "style"))  
      break;  

     // get text  
     html = ((HtmlTextNode)node).Text;  

     // is it in fact a special closing node output as text?  
     if (HtmlNode.IsOverlappedClosingElement(html))  
      break;  

     // check the text is meaningful and not a bunch of whitespaces  
     if (html.Trim().Length > 0)  
     {  
      outText.Write(HtmlEntity.DeEntitize(html));  
     }  
     break;  

    case HtmlNodeType.Element:  
     switch(node.Name)  
     {  
      case "p":  
       // treat paragraphs as crlf  
       outText.Write("\r\n");  
       break;  
     }  

     if (node.HasChildNodes)  
     {  
      ConvertContentTo(node, outText);  
     }  
     break;  
   }  
  }  
 }  
}  





http://read.pudn.com/downloads151/sourcecode/windows/dotnet/657190/HtmlAgilityPack/Html2Rss/Html2Rss.cs__.htm
本帖最后由 张小鱼 于 2011-02-15 10:51 编辑
小鱼的淘宝店铺-多多支持哇

使用HtmlAgilityPack更好的HTML分析和验证

视频在线上传+队列转换FLV+水印+捉图+修复+获时+转3GP(API语言不限,开视频站必备!)
让我们面对它,有时候,当您正在编写自定义的提取和验证规则时Microsoft.VisualStudio.TestTools.WebTesting.HtmlDocument 类不会剪切它。HtmlDocument最初设计是作为一个内部类非常有效地为HTML响应正文之外的从属请求(比如图像)分析URLs。VS 2005 RTM 之前,我们将HtmlDocument 作为公有WebTestFramework API的一部分,但是时间安排和资源约束阻止我们为其添加更多的常规目的 DOM 功能如InnerHtml、InnerText 和GetElementById。您可以自己分析HTML字符串,不过
幸运的是还有一个更好的选择:HtmlAgilityPack
HtmlAgilityPack 是CodePlex 上的一个开源项目。它提供了标准的DOM API 和XPath 导航--即使 HTML 不是适当的格式!
下面是使用HtmlAgilityPack.HtmlDocument代替WebTestFramework中的Web测试示例。它简单验证微软主页在导航工具条上将Windows列为第一项。下载HtmlAgilityPack 并从您的测试项目添加对它的引用来尝试此编码 Web 测试。
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.VisualStudio.TestTools.WebTesting;
using HtmlAgilityPack;
publicclassWebTest1Coded : WebTest
{
publicoverrideIEnumerator<WebTestRequest> GetRequestEnumerator()
{
WebTestRequest request1 = newWebTestRequest("http://www.microsoft.com/");
request1.ValidateResponse += newEventHandler<ValidationEventArgs>(request1_ValidateResponse);
yieldreturn request1;

}
void request1_ValidateResponse(object sender, ValidationEventArgs e)
{
//load the response body string as an HtmlAgilityPack.HtmlDocument

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(e.Response.BodyString);
//locate the "Nav" element

HtmlNode navNode = doc.GetElementbyId("Nav");
//pick the first <li> element

HtmlNode firstNavItemNode = navNode.SelectSingleNode(".//li");
//validate the first list item in the Nav element says "Windows"

e.IsValid = firstNavItemNode.InnerText == "Windows";

}

}
小鱼的淘宝店铺-多多支持哇

Htmlbird CMS中的缓存管理类

视频在线上传+队列转换FLV+水印+捉图+修复+获时+转3GP(API语言不限,开视频站必备!)

这个缓存管理类摘自网鸟网站内容管理系统(Htmlbird CMS),是对Asp.Net缓存操作的简单的封装。
代码如下:

代码 复制 - 运行

//===============================================================================   

// 产品名称:网鸟网站内容管理系统(Htmlbird CMS)   

// 产品作者:YMind Chan   

// 版权所有:彦铭工作室 网鸟IT技术论坛   

//===============================================================================   

// Copyright © Htmlbird.Net. All rights reserved.   

// 官方网站:http://www.htmlbird.net/   

// 技术论坛:http://bbs.htmlbird.net/   

//===============================================================================   



using System;   

using System.Collections;   

using System.Web;   

using System.Web.Caching;   



namespace HtmlbirdCMS.Core   

{   

    /// <summary>   

    /// 为 HtmlbirdCMS 实现用于 Web 应用程序的缓存管理。无法继承此类。   

    /// </summary>   

    public sealed class CacheManager   

    {   

        #region 私有字段   



        private const string _DefaultPrefix = "HtmlbirdCMS.Default";   

        private string _Prefix;   



        #endregion   



        #region 构造函数   



        /// <summary>   

        /// 初始化缓存管理器对象。   

        /// </summary>   

        internal CacheManager()   

        {   

            _Prefix = _DefaultPrefix;   

        }   



        #endregion   



        #region 私有方法   



        /// <summary>   

        /// 检查给定的缓存键是否合法,如果不合法则直接修正它。   

        /// </summary>   

        /// <param name="key">要检查的缓存键。</param>   

        /// <returns>经过检查并修正的缓存键。</returns>   

        private string _CheckCacheKey(string key)   

        {   

            if (key.StartsWith(_Prefix + "-") == false)   

                key = String.Format("{0}-{1}", _Prefix, key);   



            return key;   

        }   



        #endregion   



        #region 公有方法   



        #region 添加缓存   



        /// <summary>   

        /// 添加一个缓存对象。   

        /// </summary>   

        /// <param name="key">用于引用该项的缓存键。</param>   

        /// <param name="value">要插入缓存中的对象。</param>   

        public void Add(string key, object value)   

        {   

            this.Add(key, value);   

        }   



        /// <summary>   

        /// 添加一个缓存对象。   

        /// </summary>   

        /// <param name="key">用于引用该项的缓存键。</param>   

        /// <param name="value">要插入缓存中的对象。</param>   

        /// <param name="absoluteExpiration">所插入对象将过期并被从缓存中移除的时间。</param>   

        public void Add(string key, object value, TimeSpan absoluteExpiration)   

        {   

            this.Add(key, value, DateTime.Now.Add(absoluteExpiration), TimeSpan.Zero);   

        }   



        /// <summary>   

        /// 添加一个缓存对象。   

        /// </summary>   

        /// <param name="key">用于引用该项的缓存键。</param>   

        /// <param name="value">要插入缓存中的对象。</param>   

        /// <param name="dependencies">所插入对象的文件依赖项或缓存键依赖项。当任何依赖项更改时,该对象即无效,并从缓存中移除。如果没有依赖项,则此参数包含 null。</param>   

        /// <param name="absoluteExpiration">所插入对象将过期并被从缓存中移除的时间。</param>   

        public void Add(string key, object value, CacheDependency dependencies, TimeSpan absoluteExpiration)   

        {   

            this.Add(key, value, dependencies, DateTime.Now.Add(absoluteExpiration), TimeSpan.Zero);   

        }   



        /// <summary>   

        /// 添加一个缓存对象。   

        /// </summary>   

        /// <param name="key">用于引用该项的缓存键。</param>   

        /// <param name="value">要插入缓存中的对象。</param>   

        /// <param name="absoluteExpiration">所插入对象将过期并被从缓存中移除的时间。如果使用绝对过期,则 slidingExpiration 参数必须为 System.Web.Caching.Cache.NoSlidingExpiration。</param>   

        /// <param name="slidingExpiration">最后一次访问所插入对象时与该对象过期时之间的时间间隔。如果该值等效于 20 分钟,则对象在最后一次被访问 20 分钟之后将过期并被从缓存中移除。如果使用可调过期,则absoluteExpiration 参数必须为 System.Web.Caching.Cache.NoAbsoluteExpiration。</param>   

        public void Add(string key, object value, DateTime absoluteExpiration, TimeSpan slidingExpiration)   

        {   

            this.Add(key, value, null, absoluteExpiration, slidingExpiration);   

        }   



        /// <summary>   

        /// 添加一个缓存对象。   

        /// </summary>   

        /// <param name="key">用于引用该项的缓存键。</param>   

        /// <param name="value">要插入缓存中的对象。</param>   

        /// <param name="dependencies">所插入对象的文件依赖项或缓存键依赖项。当任何依赖项更改时,该对象即无效,并从缓存中移除。如果没有依赖项,则此参数包含 null。</param>   

        /// <param name="absoluteExpiration">所插入对象将过期并被从缓存中移除的时间。如果使用绝对过期,则 slidingExpiration 参数必须为 System.Web.Caching.Cache.NoSlidingExpiration。</param>   

        /// <param name="slidingExpiration">最后一次访问所插入对象时与该对象过期时之间的时间间隔。如果该值等效于 20 分钟,则对象在最后一次被访问 20 分钟之后将过期并被从缓存中移除。如果使用可调过期,则absoluteExpiration 参数必须为 System.Web.Caching.Cache.NoAbsoluteExpiration。</param>   

        public void Add(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration)   

        {   

            this.Add(key, value, dependencies, absoluteExpiration, slidingExpiration, CacheItemPriority.Default, null);   

        }   



        /// <summary>   

        /// 添加一个缓存对象。   

        /// </summary>   

        /// <param name="key">用于引用该项的缓存键。</param>   

        /// <param name="value">要插入缓存中的对象。</param>   

        /// <param name="absoluteExpiration">所插入对象将过期并被从缓存中移除的时间。如果使用绝对过期,则 slidingExpiration 参数必须为 System.Web.Caching.Cache.NoSlidingExpiration。</param>   

        /// <param name="slidingExpiration"> 最后一次访问所插入对象时与该对象过期时之间的时间间隔。如果该值等效于 20 分钟,则对象在最后一次被访问 20 分钟之后将过期并被从缓存中移除。如果使用可调过期,则absoluteExpiration 参数必须为 System.Web.Caching.Cache.NoAbsoluteExpiration。</param>   

        /// <param name="priority">该对象相对于缓存中存储的其他项的成本,由 System.Web.Caching.CacheItemPriority 枚举表示。该值由缓存在退出对象时使用;具有较低成本的对象在具有较高成本的对象之前被从缓存移除。</param>   

        /// <param name="onRemoveCallback">在从缓存中移除对象时将调用的委托(如果提供)。当从缓存中删除应用程序的对象时,可使用它来通知应用程序。</param>   

        public void Add(string key, object value, DateTime absoluteExpiration, TimeSpan slidingExpiration, CacheItemPriority priority, CacheItemRemovedCallback onRemoveCallback)   

        {   

            this.Add(key, value, null, absoluteExpiration, slidingExpiration, priority, onRemoveCallback);   

        }   



        /// <summary>   

        /// 添加一个缓存对象。   

        /// </summary>   

        /// <param name="key">用于引用该项的缓存键。</param>   

        /// <param name="value">要插入缓存中的对象。</param>   

        /// <param name="dependencies">所插入对象的文件依赖项或缓存键依赖项。当任何依赖项更改时,该对象即无效,并从缓存中移除。如果没有依赖项,则此参数包含 null。</param>   

        /// <param name="absoluteExpiration">所插入对象将过期并被从缓存中移除的时间。如果使用绝对过期,则 slidingExpiration 参数必须为 System.Web.Caching.Cache.NoSlidingExpiration。</param>   

        /// <param name="slidingExpiration"> 最后一次访问所插入对象时与该对象过期时之间的时间间隔。如果该值等效于 20 分钟,则对象在最后一次被访问 20 分钟之后将过期并被从缓存中移除。如果使用可调过期,则absoluteExpiration 参数必须为 System.Web.Caching.Cache.NoAbsoluteExpiration。</param>   

        /// <param name="priority">该对象相对于缓存中存储的其他项的成本,由 System.Web.Caching.CacheItemPriority 枚举表示。该值由缓存在退出对象时使用;具有较低成本的对象在具有较高成本的对象之前被从缓存移除。</param>   

        /// <param name="onRemoveCallback">在从缓存中移除对象时将调用的委托(如果提供)。当从缓存中删除应用程序的对象时,可使用它来通知应用程序。</param>   

        public void Add(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration, CacheItemPriority priority, CacheItemRemovedCallback onRemoveCallback)   

        {   

            HttpContext.Current.Cache.Insert(_CheckCacheKey(key), value, dependencies, absoluteExpiration, slidingExpiration, priority, onRemoveCallback);   

        }   



        #endregion   



        #region 删除缓存   



        /// <summary>   

        /// 从 Cache 移除指定项。   

        /// </summary>   

        /// <param name="key">要移除的缓存项的 System.String 标识符。</param>   

        /// <returns>从 CacheStrategy.Cache 移除的项。如果未找到键参数中的值,则返回null。</returns>   

        public object Remove(string key)   

        {   

            return HttpContext.Current.Cache.Remove(_CheckCacheKey(key));   

        }   



        #endregion   



        #region 获取缓存数目   



        /// <summary>   

        /// 根据键名前缀返回缓存项数。注意该方法返回的是仅仅以 prefix 为前缀的缓存项目的总数。   

        /// </summary>   

        /// <param name="prefix">指定的缓存键名前缀。</param>   

        /// <returns>以 prefix 为前缀的缓存项目的总数。</returns>   

        public int GetCountByPrefix(string prefix)   

        {   

            int i = 0;   



            IDictionaryEnumerator E = HttpContext.Current.Cache.GetEnumerator();   



            while (E.MoveNext())   

            {   

                if (E.Key.ToString().StartsWith(prefix) == true)   

                    i++;   

            }   



            return i;   

        }   



        #endregion   



        #region 判断缓存是否已经存在   



        /// <summary>   

        /// 判断给定的键是否已经拥有缓存项。   

        /// </summary>   

        /// <param name="key">用于引用该项的缓存键。</param>   

        /// <returns>返回 true 表示已经存在缓存项。</returns>   

        public bool Contains(string key)   

        {   

            return this.Get(key) != null;   

        }   



        #endregion   



        #region 读取缓存   



        /// <summary>   

        /// 从 Cache 对象检索指定项。   

        /// </summary>   

        /// <param name="key">要检索的缓存项的标识符。</param>   

        /// <returns>检索到的缓存项,未找到该键时为null。</returns>   

        public object Get(string key)   

        {   

            return HttpContext.Current.Cache.Get(_CheckCacheKey(key));   

        }   



        #endregion   



        #region 删除所有缓存   



        /// <summary>   

        /// 重置缓存管理器,这将清空所有已缓存的项。   

        /// </summary>   

        public void Reset()   

        {   

            IDictionaryEnumerator E = HttpContext.Current.Cache.GetEnumerator();   



            while (E.MoveNext())   

            {   

                HttpContext.Current.Cache.Remove(_CheckCacheKey((string)E.Key));   

            }   

        }   



        #endregion   



        #endregion   



        #region 公有属性   



        /// <summary>   

        /// 获取当前缓存项数。   

        /// </summary>   

        public int Count { get { return HttpContext.Current.Cache.Count; } }   



        /// <summary>   

        /// 设置或获取缓存键名前缀。   

        /// </summary>   

        public string Prefix   

        {   

            get  

            {   

                if (String.IsNullOrEmpty(_Prefix))   

                    _Prefix = _DefaultPrefix;   



                return _Prefix;   

            }   

            set { _Prefix = value; }   

        }   



        /// <summary>   

        /// 设置或获取指定键处的缓存项。   

        /// </summary>   

        /// <param name="key">表示缓存项的键的 System.String 对象。</param>   

        /// <returns>指定的缓存项。</returns>   

        public object this[string key]   

        {   

            get { return HttpContext.Current.Cache.Get(_CheckCacheKey(key)); }   

            set { HttpContext.Current.Cache.Insert(_CheckCacheKey(key), value); }   

        }   



        /// <summary>   

        /// 获取在 ASP.NET 开始从缓存中移除项之前应用程序可使用的物理内存百分比。   

        /// </summary>   

        public long EffectivePercentagePhysicalMemoryLimit { get { return HttpContext.Current.Cache.EffectivePercentagePhysicalMemoryLimit; } }   



        /// <summary>   

        /// 获取可用于缓存的字节数。   

        /// </summary>   

        public long EffectivePrivateBytesLimit { get { return HttpContext.Current.Cache.EffectivePrivateBytesLimit; } }   



        #endregion   

    }   

}  


来源:网鸟模板引挚http://www.ymind.net/Article/36.aspx
代码高亮也不错
小鱼的淘宝店铺-多多支持哇

轻量级的css压缩类(C#)

视频在线上传+队列转换FLV+水印+捉图+修复+获时+转3GP(API语言不限,开视频站必备!)
如果你的css代码写的非常整齐,那么压缩空间就不是很大。
注意:使用该类压缩样式表文件,样式表中不能包含非法的语法格式,例如使用js格式的注释,这会造成一些问题。总之,只要你的代码没有问题,此类就没有问题!哈哈
相关链接:轻量级的Javascript压缩类(C#)
代码原型是他人的,我将其优化成为我自己喜欢的编码风格,使用方法非常简单:

    // 要压缩的文件的完整路径
    string fileName = @"E:\test.css";  

    // 压缩代码
    StringBuilder fileContents = CssMinifier.Minify(File.OpenText(fileName));

    这个轻量级的Javascript压缩类的C#代码如下:

    代码 复制 - 运行

    // ===============================================================================   
    
    //  产品名称:网鸟网站内容管理系统(Htmlbird CMS)   
    
    //  产品作者:YMind Chan   
    
    //  版权所有:网鸟IT技术论坛 颜铭工作室   
    
    // ===============================================================================   
    
    //  Copyright © Htmlbird.Net. All rights reserved .   
    
    //  官方网站:http://www.htmlbird.net/   
    
    //  技术论坛:http://bbs.htmlbird.net/   
    
    // ===============================================================================   
    
    using System;   
    
    using System.IO;   
    
    using System.Text;   
    
    
    
    namespace Net.Htmlbird.Framework.Modules   
    
    {   
    
        /// <summary>   
    
        /// 提供压缩 Css 代码的能力。   
    
        /// </summary>   
    
        public sealed class CssMinifier   
    
        {   
    
            #region 私有字段   
    
    
    
            private const int EOF = -1;   
    
    
    
            private readonly StringBuilder _CssBuilder;   
    
            private readonly TextReader _CssReader;   
    
            private int _TheA = Convert.ToInt32('\n');   
    
            private int _TheB;   
    
            private int _TheLookahead = EOF;   
    
    
    
            #endregion   
    
    
    
            #region 构造函数   
    
    
    
            /// <summary>   
    
            /// 初始化 <see cref="CssMinifier"/> 类的新实例。   
    
            /// </summary>   
    
            /// <param name="cssReader">包含要压缩的 Css 代码的 <see cref="TextReader"/>。</param>   
    
            private CssMinifier(TextReader cssReader)   
    
            {   
    
                if (cssReader == null) throw new ArgumentNullException("cssReader");   
    
    
    
                this._CssReader = cssReader;   
    
                this._CssBuilder = new StringBuilder();   
    
            }   
    
    
    
            #endregion   
    
    
    
            #region 静态方法   
    
    
    
            /// <summary>   
    
            /// 压缩指定的 Css 代码。   
    
            /// </summary>   
    
            /// <param name="css">包含要压缩的 Css 代码的 <see cref="StringBuilder"/>。</param>   
    
            /// <returns>返回包含压缩后的 Css 代码的 <see cref="StringBuilder"/>。</returns>   
    
            public static StringBuilder Minify(StringBuilder css) { return Minify(new StringReader(css.ToString())); }   
    
    
    
            /// <summary>   
    
            /// 压缩指定的 Css 代码。   
    
            /// </summary>   
    
            /// <param name="cssCode">要压缩的 Css 代码。</param>   
    
            /// <returns>返回包含压缩后的 Css 代码的 <see cref="StringBuilder"/>。</returns>   
    
            public static StringBuilder Minify(string cssCode) { return Minify(new StringReader(cssCode)); }   
    
    
    
            /// <summary>   
    
            /// 压缩指定的 Css 代码。   
    
            /// </summary>   
    
            /// <param name="cssReader">包含要压缩的 Css 代码的 <see cref="TextReader"/>。</param>   
    
            /// <returns>返回包含压缩后的 Css 代码的 <see cref="StringBuilder"/>。</returns>   
    
            public static StringBuilder Minify(TextReader cssReader)   
    
            {   
    
                CssMinifier m = new CssMinifier(cssReader);   
    
    
    
                m._Cssmin();   
    
    
    
                return m._CssBuilder;   
    
            }   
    
    
    
            #endregion   
    
    
    
            #region 私有方法   
    
    
    
            private void _Cssmin()   
    
            {   
    
                this._Action(3);   
    
    
    
                while (this._TheA != EOF)   
    
                {   
    
                    switch ((Char)this._TheA)   
    
                    {   
    
                        case ' ':   
    
                            switch ((Char)this._TheB)   
    
                            {   
    
                                case ' ':   
    
                                case '{':   
    
                                case ':':   
    
                                case '\n':   
    
                                case '\r':   
    
                                case '\t':   
    
                                    this._Action(2);   
    
    
    
                                    break;   
    
                                default:   
    
                                    this._Action(1);   
    
    
    
                                    break;   
    
                            }   
    
    
    
                            break;   
    
                        case ':':   
    
                        case ',':   
    
                            switch ((Char)this._TheB)   
    
                            {   
    
                                case ' ':   
    
                                    this._Action(3);   
    
    
    
                                    break;   
    
                                default:   
    
                                    this._Action(1);   
    
    
    
                                    break;   
    
                            }   
    
                            break;   
    
                        case ';':   
    
                            switch ((Char)this._TheB)   
    
                            {   
    
                                case ' ':   
    
                                case '\n':   
    
                                case '\r':   
    
                                case '\t':   
    
                                    this._Action(3);   
    
    
    
                                    break;   
    
                                case '}':   
    
                                    this._Action(2);   
    
    
    
                                    break;   
    
                                default:   
    
                                    this._Action(1);   
    
    
    
                                    break;   
    
                            }   
    
    
    
                            break;   
    
                        case '\t':   
    
                        case '\r':   
    
                        case '\n':   
    
                            this._Action(2);   
    
    
    
                            break;   
    
                        default:   
    
                            this._Action(1);   
    
    
    
                            break;   
    
                    }   
    
                }   
    
            }   
    
    
    
            private void _Action(int d)   
    
            {   
    
                if (d <= 1) this._Put(this._TheA);   
    
                if (d <= 2)   
    
                {   
    
                    this._TheA = this._TheB;   
    
    
    
                    if (this._TheA == '\'' || this._TheA == '"')   
    
                    {   
    
                        for (; ; )   
    
                        {   
    
                            this._Put(this._TheA);   
    
                            this._TheA = this._Get();   
    
    
    
                            if (this._TheA == this._TheB) break;   
    
                            if (this._TheA <= '\n') throw new FormatException(string.Format("Error: unterminated string literal: {0}\n", this._TheA));   
    
                            if (this._TheA != '\\') continue;   
    
    
    
                            this._Put(this._TheA);   
    
                            this._TheA = this._Get();   
    
                        }   
    
                    }   
    
                }   
    
                if (d > 3) return;   
    
    
    
                this._TheB = this._Next();   
    
    
    
                if (this._TheB != '/' || ((((((((((((this._TheA != '(' && this._TheA != ',') && this._TheA != '=') && this._TheA != '[') && this._TheA != '!') && this._TheA != ':') && this._TheA != '&') && this._TheA != '|') && this._TheA != '?') && this._TheA != '{') && this._TheA != '}') && this._TheA != ';') && this._TheA != '\n')) return;   
    
    
    
                this._Put(this._TheA);   
    
                this._Put(this._TheB);   
    
    
    
                for (; ; )   
    
                {   
    
                    this._TheA = this._Get();   
    
    
    
                    if (this._TheA == '/') break;   
    
                    if (this._TheA == '\\')   
    
                    {   
    
                        this._Put(this._TheA);   
    
                        this._TheA = this._Get();   
    
                    }   
    
                    else if (this._TheA <= '\n') throw new FormatException(string.Format("Error: unterminated Regular Expression literal : {0}.\n", this._TheA));   
    
    
    
                    this._Put(this._TheA);   
    
                }   
    
    
    
                this._TheB = this._Next();   
    
            }   
    
    
    
            private int _Next()   
    
            {   
    
                int c = this._Get();   
    
                const int s = (int)'*';   
    
    
    
                if (c == '/')   
    
                {   
    
                    switch ((Char)this._Peek())   
    
                    {   
    
                        case '*':   
    
                            this._Get();   
    
    
    
                            for (; ; )   
    
                            {   
    
                                switch (this._Get())   
    
                                {   
    
                                    case s:   
    
                                        if (this._Peek() == '/')   
    
                                        {   
    
                                            this._Get();   
    
    
    
                                            return Convert.ToInt32(' ');   
    
                                        }   
    
    
    
                                        break;   
    
                                    case EOF:   
    
                                        throw new FormatException("Error: Unterminated comment.\n");   
    
                                }   
    
                            }   
    
                        default:   
    
    
    
                            return c;   
    
                    }   
    
                }   
    
    
    
                return c;   
    
            }   
    
    
    
            private int _Peek()   
    
            {   
    
                this._TheLookahead = this._Get();   
    
    
    
                return this._TheLookahead;   
    
            }   
    
    
    
            private int _Get()   
    
            {   
    
                int c = this._TheLookahead;   
    
                this._TheLookahead = EOF;   
    
    
    
                if (c == EOF) c = this._CssReader.Read();   
    
    
    
                return c >= ' ' || c == '\n' || c == EOF ? c : (c == '\r' ? '\n' : ' ');   
    
            }   
    
    
    
            private void _Put(int c) { this._CssBuilder.Append((char)c); }   
    
    
    
            #endregion   
    
        }   
    
    } 
    


    bsczc6_CssMinifier.zip (您是游客您没有权限下载)


    http://www.ymind.net/Article/77.aspx
本帖最后由 张小鱼 于 2011-09-02 16:44 编辑
小鱼的淘宝店铺-多多支持哇

轻量级的Javascript压缩类(C#)

视频在线上传+队列转换FLV+水印+捉图+修复+获时+转3GP(API语言不限,开视频站必备!)

这里不讨论为什么要压缩Javascript代码,也不讨论如何去压缩Javascript代码,我只是介绍一种简单的方法来实现它。
至于压缩Javascript代码有多大的用处,自己体会吧!
相关链接:轻量级的css压缩类(C#)
代码原型是他人的,我将其优化成为我自己喜欢的编码风格,使用方法非常简单:

代码 复制 - 运行

// 要压缩的文件的完整路径   

string fileName = @"E:\test.js";   



// 压缩代码   

StringBuilder fileContents = JavaScriptMinifier.Minify(File.OpenText(fileName)); 



这个轻量级的Javascript压缩类的C#代码如下:

代码 复制 - 运行

// ===============================================================================   

//  产品名称:网鸟网站内容管理系统(Htmlbird CMS)   

//  产品作者:YMind Chan   

//  版权所有:网鸟IT技术论坛 颜铭工作室   

// ===============================================================================   

//  Copyright © Htmlbird.Net. All rights reserved .   

//  官方网站:http://www.htmlbird.net/   

//  技术论坛:http://bbs.htmlbird.net/   

// ===============================================================================   

using System;   

using System.IO;   

using System.Text;   



namespace Net.Htmlbird.Framework.Modules   

{   

    /// <summary>   

    /// 提供压缩 JavaScript 代码的能力。   

    /// </summary>   

    public sealed class JavaScriptMinifier   

    {   

        #region 私有字段   



        private const int EOF = -1;   



        private readonly StringBuilder _JsBuilder;   

        private readonly TextReader _JsReader;   

        private int _TheA = Convert.ToInt32('\n');   

        private int _TheB;   

        private int _TheLookahead = EOF;   



        #endregion   



        #region 构造函数   



        /// <summary>   

        /// 初始化 <see cref="JavaScriptMinifier"/> 类的新实例。   

        /// </summary>   

        /// <param name="jsReader">包含要压缩的 JavaScript 代码的 <see cref="TextReader"/>。</param>   

        private JavaScriptMinifier(TextReader jsReader)   

        {   

            if (jsReader == null) throw new ArgumentNullException("jsReader");   



            this._JsReader = jsReader;   

            this._JsBuilder = new StringBuilder();   

        }   



        #endregion   



        #region 静态方法   



        /// <summary>   

        /// 压缩指定的 JavaScript 代码。   

        /// </summary>   

        /// <param name="js">包含要压缩的 JavaScript 代码的 <see cref="StringBuilder"/>。</param>   

        /// <returns>返回包含压缩后的 JavaScript 代码的 <see cref="StringBuilder"/>。</returns>   

        public static StringBuilder Minify(StringBuilder js) { return Minify(new StringReader(js.ToString())); }   



        /// <summary>   

        /// 压缩指定的 JavaScript 代码。   

        /// </summary>   

        /// <param name="jsCode">要压缩的 JavaScript 代码。</param>   

        /// <returns>返回包含压缩后的 JavaScript 代码的 <see cref="StringBuilder"/>。</returns>   

        public static StringBuilder Minify(string jsCode) { return Minify(new StringReader(jsCode)); }   



        /// <summary>   

        /// 压缩指定的 JavaScript 代码。   

        /// </summary>   

        /// <param name="jsReader">包含要压缩的 JavaScript 代码的 <see cref="TextReader"/>。</param>   

        /// <returns>返回包含压缩后的 JavaScript 代码的 <see cref="StringBuilder"/>。</returns>   

        public static StringBuilder Minify(TextReader jsReader)   

        {   

            JavaScriptMinifier jsmin = new JavaScriptMinifier(jsReader);   



            jsmin._Jsmin();   



            return jsmin._JsBuilder;   

        }   



        #endregion   



        #region 私有方法   



        private void _Jsmin()   

        {   

            this._Action(3);   



            while (this._TheA != EOF)   

            {   

                switch ((Char)this._TheA)   

                {   

                    case ' ':   

                        if (_IsAlphanum(this._TheB)) this._Action(1);   

                        else this._Action(2);   



                        break;   

                    case '\n':   

                        switch ((Char)this._TheB)   

                        {   

                            case '{':   

                            case '[':   

                            case '(':   

                            case '+':   

                            case '-':   

                                this._Action(1);   



                                break;   

                            case ' ':   

                                this._Action(3);   



                                break;   

                            default:   

                                if (_IsAlphanum(this._TheB)) this._Action(1);   

                                else this._Action(2);   



                                break;   

                        }   



                        break;   

                    default:   

                        switch ((Char)this._TheB)   

                        {   

                            case ' ':   

                                if (_IsAlphanum(this._TheA))   

                                {   

                                    this._Action(1);   



                                    break;   

                                }   



                                this._Action(3);   



                                break;   

                            case '\n':   

                                switch ((Char)this._TheA)   

                                {   

                                    case '}':   

                                    case ']':   

                                    case ')':   

                                    case '+':   

                                    case '-':   

                                    case '"':   

                                    case '\'':   

                                        this._Action(1);   



                                        break;   

                                    default:   

                                        if (_IsAlphanum(this._TheA)) this._Action(1);   

                                        else this._Action(3);   



                                        break;   

                                }   



                                break;   

                            default:   

                                this._Action(1);   



                                break;   

                        }   



                        break;   

                }   

            }   

        }   



        private void _Action(int d)   

        {   

            if (d <= 1) this._Put(this._TheA);   

            if (d <= 2)   

            {   

                this._TheA = this._TheB;   



                if (this._TheA == '\'' || this._TheA == '"')   

                {   

                    for (; ; )   

                    {   

                        this._Put(this._TheA);   

                        this._TheA = this._Get();   



                        if (this._TheA == this._TheB) break;   

                        if (this._TheA <= '\n') throw new Exception(string.Format("Error: JSMIN unterminated string literal: {0}", this._TheA));   

                        if (this._TheA != '\\') continue;   



                        this._Put(this._TheA);   

                        this._TheA = this._Get();   

                    }   

                }   

            }   



            if (d > 3) return;   



            this._TheB = this._Next();   



            if (this._TheB != '/' || ((((((((((((this._TheA != '(' && this._TheA != ',') && this._TheA != '=') && this._TheA != '[') && this._TheA != '!') && this._TheA != ':') && this._TheA != '&') && this._TheA != '|') && this._TheA != '?') && this._TheA != '{') && this._TheA != '}') && this._TheA != ';') && this._TheA != '\n')) return;   



            this._Put(this._TheA);   

            this._Put(this._TheB);   



            for (; ; )   

            {   

                this._TheA = this._Get();   



                if (this._TheA == '/') break;   



                if (this._TheA == '\\')   

                {   

                    this._Put(this._TheA);   

                    this._TheA = this._Get();   

                }   

                else if (this._TheA <= '\n') throw new Exception(string.Format("Error: JSMIN unterminated Regular Expression literal : {0}.", this._TheA));   



                this._Put(this._TheA);   

            }   



            this._TheB = this._Next();   

        }   



        private int _Next()   

        {   

            int c = this._Get();   

            const int s = (int)'*';   



            if (c == '/')   

            {   

                switch ((Char)this._Peek())   

                {   

                    case '/':   

                        for (; ; )   

                        {   

                            c = this._Get();   



                            if (c <= '\n') return c;   

                        }   

                    case '*':   

                        this._Get();   



                        for (; ; )   

                        {   

                            switch (this._Get())   

                            {   

                                case s:   

                                    if (this._Peek() == '/')   

                                    {   

                                        this._Get();   



                                        return Convert.ToInt32(' ');   

                                    }   



                                    break;   

                                case EOF:   

                                    throw new Exception("Error: JSMIN Unterminated comment.");   

                            }   

                        }   

                    default:   

                        return c;   

                }   

            }   



            return c;   

        }   



        private int _Peek()   

        {   

            this._TheLookahead = this._Get();   



            return this._TheLookahead;   

        }   



        private int _Get()   

        {   

            int c = this._TheLookahead;   

            this._TheLookahead = EOF;   



            if (c == EOF) c = this._JsReader.Read();   



            return c >= ' ' || c == '\n' || c == EOF ? c : (c == '\r' ? '\n' : ' ');   

        }   



        private void _Put(int c) { this._JsBuilder.Append((char)c); }   



        private static bool _IsAlphanum(int c) { return ((c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || c == '_' || c == '$' || c == '\\' || c > 126); }   



        #endregion   

    }   

} 

rr44kv_JavaScriptMinifier.zip (您是游客您没有权限下载)

http://www.ymind.net/Article/76.aspx
小鱼的淘宝店铺-多多支持哇

分享一个简单且方便的定时器操作类——SimpleTimer

视频在线上传+队列转换FLV+水印+捉图+修复+获时+转3GP(API语言不限,开视频站必备!)

在很多时候我们都需要用到定时器,用的多了,觉得 .Net 自带的几个定时器类用起来都不是那么方便,总是需要初始化和设置很多东东,由此也造成了代码的混乱。
现将我封装在网鸟小刺客基础类库中的定时器操作类共享给大家,没有太高深的技术含量,算是抛砖引玉吧!

代码 复制 - 运行

// ===============================================================================   

// 产品名称:网鸟小刺客便捷工具箱   

// 产品作者:YMind Chan   

// 版权所有:网鸟IT技术论坛 颜铭工作室   

// ===============================================================================   

// Copyright © Htmlbird.Net. All rights reserved.   

// 官方网站:http://www.htmlbird.net/   

// 技术论坛:http://bbs.htmlbird.net/   

// ===============================================================================   

using System;   

using System.Timers;   



namespace Net.Htmlbird.Framework.Modules   

{   

    /// <summary>   

    /// 包含一组方法和属性,提供简易的定时器应用。   

    /// </summary>   

    /// <typeparam name="T">表示与此类关联的对象的类型。</typeparam>   

    public sealed class SimpleTimer<T>   

    {   

        #region 私有字段   



        private Action<T> _Action1;   

        private Action<T, ElapsedEventArgs> _Action2;   

        private Action<T, Timer> _Action3;   

        private Action<T, Timer, ElapsedEventArgs> _Action4;   



        #endregion   



        #region 构造函数   



        /// <summary>   

        /// 初始化 <see cref="SimpleTimer<SimpleTimer>"/> 类的新实例。   

        /// </summary>   

        /// <param name="obj">指定与此类关联的对象的实例。</param>   

        /// <param name="interval">指定引发事件的间隔时间(以毫秒为单位)。默认为 100 毫秒。</param>   

        /// <param name="autoReset">如果应在每次间隔结束时引发事件,则为 true;如果它仅在间隔第一次结束后引发一次事件,则为 false。默认值为 true。</param>   

        public SimpleTimer(T obj, double interval, bool autoReset)   

        {   

            this.Object = obj;   



            if (interval <= 0) interval = 100;   



            this.Timer = new Timer { AutoReset = autoReset, Interval = interval };   

        }   



        #endregion   



        #region 私有方法   



        private void _Timer_Elapsed1(object sender, ElapsedEventArgs e) { this._Action1.Invoke(this.Object); }   



        private void _Timer_Elapsed2(object sender, ElapsedEventArgs e) { this._Action2.Invoke(this.Object, e); }   



        private void _Timer_Elapsed3(object sender, ElapsedEventArgs e) { this._Action3.Invoke(this.Object, this.Timer); }   



        private void _Timer_Elapsed4(object sender, ElapsedEventArgs e) { this._Action4.Invoke(this.Object, this.Timer, e); }   



        #endregion   



        #region 公有方法   



        /// <summary>   

        /// 执行定时器上的 <see cref="Action<T>"/> 委托方法。   

        /// </summary>   

        /// <param name="action">指定一个 <see cref="Action<T>"/> 委托。</param>   

        public void Run(Action<T> action)   

        {   

            if (action == null) throw new ArgumentNullException("action");   



            this._Action1 = action;   



            this.Timer.Elapsed += this._Timer_Elapsed1;   

            this.Timer.Start();   

        }   



        /// <summary>   

        /// 执行定时器上的 <see cref="Action<T, ElapsedEventArgs>"/> 委托方法。   

        /// </summary>   

        /// <param name="action">指定一个 <see cref="Action<T, ElapsedEventArgs>"/> 委托。</param>   

        public void Run(Action<T, ElapsedEventArgs> action)   

        {   

            if (action == null) throw new ArgumentNullException("action");   



            this._Action2 = action;   



            this.Timer.Elapsed += this._Timer_Elapsed2;   

            this.Timer.Start();   

        }   



        /// <summary>   

        /// 执行定时器上的 <see cref="Action<T, Timer>"/> 委托方法。   

        /// </summary>   

        /// <param name="action">指定一个 <see cref="Action<T, Timer>"/> 委托。</param>   

        public void Run(Action<T, Timer> action)   

        {   

            if (action == null) throw new ArgumentNullException("action");   



            this._Action3 = action;   



            this.Timer.Elapsed += this._Timer_Elapsed3;   

            this.Timer.Start();   

        }   



        /// <summary>   

        /// 执行定时器上的 <see cref="Action<T, Timer, ElapsedEventArgs>"/> 委托方法。   

        /// </summary>   

        /// <param name="action">指定一个 <see cref="Action<T, Timer, ElapsedEventArgs>"/> 委托。</param>   

        public void Run(Action<T, Timer, ElapsedEventArgs> action)   

        {   

            if (action == null) throw new ArgumentNullException("action");   



            this._Action4 = action;   



            this.Timer.Elapsed += this._Timer_Elapsed4;   

            this.Timer.Start();   

        }   



        #endregion   



        #region 公有属性   



        /// <summary>   

        /// 获取与此类关联的对象的实例。   

        /// </summary>   

        public T Object { get; private set; }   



        /// <summary>   

        /// 获取用于生成定期事件的定时器的实例。   

        /// </summary>   

        public Timer Timer { get; private set; }   



        #endregion   

    }   

} 



使用方法如下:
  1. // 初始化定时器,设置为每 5 秒执行一次
  2. SimpleTimer<MainForm> simpleTimer = new SimpleTimer<MainForm>(this, 5000, true);  

  3. // 开始执行定时器
  4. simpleTimer.Run(form => MessageBox.Show(form.Text));



更多的用法请自行研究代码,这里不再做示范。
YMind 提示:请查看 MSDN 并掌握 Action<T> 委托方法的使用。
http://www.ymind.net/Article/72.aspx
小鱼的淘宝店铺-多多支持哇

C#获取汉字首字母

视频在线上传+队列转换FLV+水印+捉图+修复+获时+转3GP(API语言不限,开视频站必备!)
给你一个类。这是可以获取某个汉字的拼音首字母。但“东莞”的“莞”有特别,取不到,所以要额外指定。
class Initial
 {
 /// <summary>  
 /// 在指定的字符串列表CnStr中检索符合拼音索引字符串  
 /// </summary>  
 /// <param name="CnStr">汉字字符串</param>  
 /// <returns>相对应的汉语拼音首字母串</returns>  
 public static string GetSpellCode(string CnStr)
 {
 string strTemp = "";
 int iLen = CnStr.Length;
 int i = 0;

 for (i = 0; i <= iLen - 1; i++)
 {
 strTemp += GetCharSpellCode(CnStr.Substring(i, 1));
 }

 return strTemp;
 }


 /// <summary>  
 /// 得到一个汉字的拼音第一个字母,如果是一个英文字母则直接返回大写字母  
 /// </summary>  
 /// <param name="CnChar">单个汉字</param>  
 /// <returns>单个大写字母</returns>  
 private static string GetCharSpellCode(string CnChar)
 {
 long iCnChar;

 byte[] ZW = System.Text.Encoding.Default.GetBytes(CnChar);

 //如果是字母,则直接返回  
 if (ZW.Length == 1)
 {
 return CnChar.ToUpper();
 }
 else
 {
 // get the array of byte from the single char  
 int i1 = (short)(ZW[0]);
 int i2 = (short)(ZW[1]);
 iCnChar = i1 * 256 + i2;
 }

 //expresstion  
 //table of the constant list  
 // 'A'; //45217..45252  
 // 'B'; //45253..45760  
 // 'C'; //45761..46317  
 // 'D'; //46318..46825  
 // 'E'; //46826..47009  
 // 'F'; //47010..47296  
 // 'G'; //47297..47613  

 // 'H'; //47614..48118  
 // 'J'; //48119..49061  
 // 'K'; //49062..49323  
 // 'L'; //49324..49895  
 // 'M'; //49896..50370  
 // 'N'; //50371..50613  
 // 'O'; //50614..50621  
 // 'P'; //50622..50905  
 // 'Q'; //50906..51386  

 // 'R'; //51387..51445  
 // 'S'; //51446..52217  
 // 'T'; //52218..52697  
 //没有U,V  
 // 'W'; //52698..52979  
 // 'X'; //52980..53640  
 // 'Y'; //53689..54480  
 // 'Z'; //54481..55289  

 // iCnChar match the constant  
 if ((iCnChar >= 45217) && (iCnChar <= 45252))
 {
 return "A";
 }
 else if ((iCnChar >= 45253) && (iCnChar <= 45760))
 {
 return "B";
 }
 else if ((iCnChar >= 45761) && (iCnChar <= 46317))
 {
 return "C";
 }
 else if ((iCnChar >= 46318) && (iCnChar <= 46825))
 {
 return "D";
 }
 else if ((iCnChar >= 46826) && (iCnChar <= 47009))
 {
 return "E";
 }
 else if ((iCnChar >= 47010) && (iCnChar <= 47296))
 {
 return "F";
 }
 else if ((iCnChar >= 47297) && (iCnChar <= 47613))
 {
 return "G";
 }
 else if ((iCnChar >= 47614) && (iCnChar <= 48118))
 {
 return "H";
 }
 else if ((iCnChar >= 48119) && (iCnChar <= 49061))
 {
 return "J";
 }
 else if ((iCnChar >= 49062) && (iCnChar <= 49323))
 {
 return "K";
 }
 else if ((iCnChar >= 49324) && (iCnChar <= 49895))
 {
 return "L";
 }
 else if ((iCnChar >= 49896) && (iCnChar <= 50370))
 {
 return "M";
 }

 else if ((iCnChar >= 50371) && (iCnChar <= 50613))
 {
 return "N";
 }
 else if ((iCnChar >= 50614) && (iCnChar <= 50621))
 {
 return "O";
 }
 else if ((iCnChar >= 50622) && (iCnChar <= 50905))
 {
 return "P";
 }
 else if ((iCnChar >= 50906) && (iCnChar <= 51386))
 {
 return "Q";
 }
 else if ((iCnChar >= 51387) && (iCnChar <= 51445))
 {
 return "R";
 }
 else if ((iCnChar >= 51446) && (iCnChar <= 52217))
 {
 return "S";
 }
 else if ((iCnChar >= 52218) && (iCnChar <= 52697))
 {
 return "T";
 }
 else if ((iCnChar >= 52698) && (iCnChar <= 52979))
 {
 return "W";
 }
 else if ((iCnChar >= 52980) && (iCnChar <= 53640))
 {
 return "X";
 }
 else if ((iCnChar >= 53689) && (iCnChar <= 54480))
 {
 return "Y";
 }
 else if ((iCnChar >= 54481) && (iCnChar <= 55289))
 {
 return "Z";
 }
 else return ("?");
 }
 }
小鱼的淘宝店铺-多多支持哇

HttpHelps类,用来实现Http访问,Post或者Get方式的,直接访问,带Cookie的,带证书的等方式

视频在线上传+队列转换FLV+水印+捉图+修复+获时+转3GP(API语言不限,开视频站必备!)

代码 复制 - 运行

/// <summary> 
/// 类说明:HttpHelps类,用来实现Http访问,Post或者Get方式的,直接访问,带Cookie的,带证书的等方式 
/// 编码日期:2011-08-20 
/// 编 码 人:  苏飞 
/// 联系方式:361983679  Email:sufei.1013@163.com  Blogs:http://www.cckan.net 
/// </summary> 
using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Net; 
using System.IO; 
using System.Text.RegularExpressions; 
using System.IO.Compression; 

public class HttpHelps 
{ 
    #region 预定义方法或者变更 

    //默认的编码 
    public Encoding encoding = Encoding.Default; 
    //HttpWebRequest对象用来发起请求 
    public HttpWebRequest request = null; 
    //获取影响流的数据对象 
    private HttpWebResponse response = null; 
    public Boolean isToLower = true; 
    //读取流的对象 
    private StreamReader reader = null; 
    //需要返回的数据对象 
    private string returnData = "String Error"; 

    /// <summary> 
    /// 根据相传入的数据,得到相应页面数据 
    /// </summary> 
    /// <param name="strPostdata">传入的数据Post方式,get方式传NUll或者空字符串都可以</param> 
    /// <returns>string类型的响应数据</returns> 
    private string GetHttpRequestData(string strPostdata) 
    { 
        try 
        { 
            //支持跳转页面,查询结果将是跳转后的页面 
            request.AllowAutoRedirect = false; 

            //验证在得到结果时是否有传入数据 
            if (!string.IsNullOrEmpty(strPostdata) && request.Method.Trim().ToLower().Contains("post")) 
            { 
                byte[] buffer = encoding.GetBytes(strPostdata); 
                request.ContentLength = buffer.Length; 
                request.GetRequestStream().Write(buffer, 0, buffer.Length); 
            } 

            ////最大连接数 
            //request.ServicePoint.ConnectionLimit = 1024; 

            #region 得到请求的response 

            using (response = (HttpWebResponse)request.GetResponse()) 
            { 
                //从这里开始我们要无视编码了 
                if (encoding == null) 
                { 
                    MemoryStream _stream = new MemoryStream(); 

                    if (response.ContentEncoding != null && response.ContentEncoding.Equals("gzip", StringComparison.InvariantCultureIgnoreCase)) 
                    { 
                        //开始读取流并设置编码方式 
                        //new GZipStream(response.GetResponseStream(), CompressionMode.Decompress).CopyTo(_stream, 10240); 
                        //.net4.0以下写法 
                        _stream = GetMemoryStream(response.GetResponseStream()); 
                    } 
                    else 
                    { 
                        //response.GetResponseStream().CopyTo(_stream, 10240); 
                        //.net4.0以下写法 
                        _stream = GetMemoryStream(response.GetResponseStream()); 
                    } 
                    byte[] RawResponse = _stream.ToArray(); 
                    string temp = Encoding.Default.GetString(RawResponse, 0, RawResponse.Length); 
                    //<meta(.*?)charset([\s]?)=[^>](.*?)> 
                    Match meta = Regex.Match(temp, "<meta([^<]*)charset=([^<]*)[\"']", RegexOptions.IgnoreCase | RegexOptions.Multiline); 
                    string charter = (meta.Groups.Count > 2) ? meta.Groups[2].Value : string.Empty; 
                    charter = charter.Replace("\"", string.Empty).Replace("'", string.Empty).Replace(";", string.Empty); 
                    if (charter.Length > 0) 
                    { 
                        encoding = Encoding.GetEncoding(charter); 
                    } 
                    else 
                    { 
                        if (response.CharacterSet.ToLower().Trim() == "iso-8859-1") 
                        { 
                            encoding = Encoding.GetEncoding("gbk"); 
                        } 
                        else 
                        { 
                            if (string.IsNullOrEmpty(response.CharacterSet.Trim())) 
                            { 
                                encoding = Encoding.UTF8; 
                            } 
                            else 
                            { 
                                encoding = Encoding.GetEncoding(response.CharacterSet); 
                            } 
                        } 
                    } 
                    returnData = encoding.GetString(RawResponse); 
                } 
                else 
                { 
                    if (response.ContentEncoding != null && response.ContentEncoding.Equals("gzip", StringComparison.InvariantCultureIgnoreCase)) 
                    { 
                        //开始读取流并设置编码方式 
                        using (reader = new StreamReader(new GZipStream(response.GetResponseStream(), CompressionMode.Decompress), encoding)) 
                        { 
                            returnData = reader.ReadToEnd(); 
                        } 
                    } 
                    else 
                    { 
                        //开始读取流并设置编码方式 
                        using (reader = new StreamReader(response.GetResponseStream(), encoding)) 
                        { 
                            returnData = reader.ReadToEnd(); 
                        } 
                    } 
                } 
            } 

            #endregion 
        } 
        catch (Exception) 
        { 
            //这里是在发生异常时返回的错误信息 
            returnData = "String Error"; 
        } 
        if (isToLower) 
        { 
            returnData = returnData.ToLower(); 
        } 
        return returnData; 
    } 

    /// <summary> 
    /// 4.0以下.net版本取水运 
    /// </summary> 
    /// <param name="streamResponse"></param> 
    private static MemoryStream GetMemoryStream(Stream streamResponse) 
    { 
        MemoryStream _stream = new MemoryStream(); 
        int Length = 256; 
        Byte[] buffer = new Byte[Length]; 
        int bytesRead = streamResponse.Read(buffer, 0, Length); 
        // write the required bytes   
        while (bytesRead > 0) 
        { 
            _stream.Write(buffer, 0, bytesRead); 
            bytesRead = streamResponse.Read(buffer, 0, Length); 
        } 
        return _stream; 
    } 
    /// <summary> 
    /// 传入一个正确或不正确的URl,返回正确的URL 
    /// </summary> 
    /// <param name="URL">url</param> 
    /// <returns></returns> 
    public static string GetUrl(string URL) 
    { 
        if (!(URL.Contains("http://") || URL.Contains("https://"))) 
        { 
            URL = "http://" + URL; 
        } 
        return URL; 
    } 
    /// <summary> 
    /// 为请求准备参数 
    /// </summary> 
    /// <param name="_URL">请求的URL地址</param> 
    /// <param name="_Method">请求方式Get或者Post</param> 
    /// <param name="_Accept">Accept</param> 
    /// <param name="_ContentType">ContentType返回类型</param> 
    /// <param name="_UserAgent">UserAgent客户端的访问类型,包括浏览器版本和操作系统信息</param> 
    /// <param name="_Encoding">读取数据时的编码方式</param> 
    private void SetRequest(string _URL, string _Method, string _Accept, string _ContentType, string _UserAgent, Encoding _Encoding) 
    { 
        //初始化对像,并设置请求的URL地址 
        request = (HttpWebRequest)WebRequest.Create(GetUrl(_URL)); 
        //请求方式Get或者Post 
        request.Method = _Method; 
        //Accept 
        request.Accept = _Accept; 
        //ContentType返回类型 
        request.ContentType = _ContentType; 
        //UserAgent客户端的访问类型,包括浏览器版本和操作系统信息 
        request.UserAgent = _UserAgent; 
        //读取数据时的编码方式 
        encoding = _Encoding; 
    } 

    #endregion 

    #region 普通类型 

    /// <summary> 
    /// 采用https协议GET|POST方式访问网络,根据传入的URl地址,得到响应的数据字符串。 
    /// </summary> 
    /// <param name="_URL"></param> 
    /// <param name="_Method">请求方式Get或者Post</param> 
    /// <param name="_Accept">Accept</param> 
    /// <param name="_ContentType">ContentType返回类型</param> 
    /// <param name="_UserAgent">UserAgent客户端的访问类型,包括浏览器版本和操作系统信息</param> 
    /// <param name="_Encoding">读取数据时的编码方式</param> 
    /// <param name="_Postdata">只有_Method为Post方式时才需要传入值</param> 
    /// <returns>返回Html源代码</returns> 
    public string GetHttpRequestString(string _URL, string _Method, string _Accept, string _ContentType, string _UserAgent, Encoding _Encoding, string _Postdata) 
    { 
        //准备参数 
        SetRequest(_URL, _Method, _Accept, _ContentType, _UserAgent, _Encoding); 
        //调用专门读取数据的类 
        return GetHttpRequestData(_Postdata); 
    } 

    ///<summary> 
    ///采用https协议GET方式访问网络,根据传入的URl地址,得到响应的数据字符串。 
    ///</summary> 
    ///<param name="URL">url地址</param> 
    ///<param name="objencoding">编码方式例如:System.Text.Encoding.UTF8;</param> 
    ///<returns>String类型的数据</returns> 
    public string GetHttpRequestStringByNUll_Get(string URL, Encoding objencoding) 
    { 
        //准备参数 
        SetRequest(URL, "GET", "text/html, application/xhtml+xml, */*", "text/html", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)", objencoding); 
        //调用专门读取数据的类 
        return GetHttpRequestData(""); 
    } 

    ///<summary> 
    ///采用https协议GET方式访问网络,根据传入的URl地址,得到响应的数据字符串。 
    ///</summary> 
    ///<param name="URL">url地址</param> 
    ///<param name="objencoding">编码方式例如:System.Text.Encoding.UTF8;</param> 
    ///<param name="stgrcookie">Cookie字符串</param> 
    ///<returns>String类型的数据</returns> 
    public string GetHttpRequestStringByNUll_GetBycookie(string URL, Encoding objencoding, string stgrcookie) 
    { 
        //准备参数 
        SetRequest(URL, "GET", "text/html, application/xhtml+xml, */*", "text/html", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)", objencoding); 
        request.Headers[HttpRequestHeader.Cookie] = stgrcookie; 
        //调用专门读取数据的类 
        return GetHttpRequestData(""); 
    } 

    ///<summary> 
    ///采用https协议GET方式访问网络,根据传入的URl地址,得到响应的数据字符串。 
    ///</summary> 
    ///<param name="URL">url地址</param> 
    ///<param name="objencoding">编码方式例如:System.Text.Encoding.UTF8;</param> 
    ///<returns>String类型的数据</returns> 
    public string GetHttpRequestStringByNUll_Get(string URL, Encoding objencoding, string _Accept, string useragent) 
    { 
        //准备参数 
        SetRequest(URL, "GET", _Accept, "text/html", useragent, objencoding); 
        //调用专门读取数据的类 
        return GetHttpRequestData(""); 
    } 

    ///<summary> 
    ///采用https协议Post方式访问网络,根据传入的URl地址,得到响应的数据字符串。 
    ///</summary> 
    ///<param name="URL">url地址</param> 
    ///<param name="strPostdata">Post发送的数据</param> 
    ///<param name="objencoding">编码方式例如:System.Text.Encoding.UTF8;</param> 
    ///<returns>String类型的数据</returns> 
    public string GetHttpRequestStringByNUll_Post(string URL, string strPostdata, Encoding objencoding) 
    { 
        //准备参数 
        SetRequest(URL, "post", "text/html, application/xhtml+xml, */*", "text/html", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)", objencoding); 
        //调用专门读取数据的类 
        return GetHttpRequestData(strPostdata); 
    } 

    #endregion 
} 




HttpHelps.zip (您是游客您没有权限下载)


C#多线程|匿名委托传参数|测试您的网站能承受的压力|附源代码

C#多线程匿名委托传参数测试您的网站能承受的压力附源代码.zip (您是游客您没有权限下载)

本帖最后由 张小鱼 于 2012-08-20 10:10 编辑
小鱼的淘宝店铺-多多支持哇