• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
博雅居
要想跟上时代,就得不断学习!
博客园    首页    新随笔    联系   管理    订阅  订阅
4.2 event

 

 

 

using System;
  
public delegate void DownloadStartHandler(object sender, DownloadStartEventArgs e);  //声明委托
public delegate void DownloadEndHandler(object sender, DownloadEndEventArgs e);  
public delegate void DownloadingHandler(object sender, DownloadingEventArgs e);  
  
public class DownloadStartEventArgs
{
    public string Url{ get{ return _url;} set{ _url=value;} }
    private string _url;
  
    public DownloadStartEventArgs( string url ){ this._url = url; }
}
  
public class DownloadEndEventArgs
{
    public string Url{ get{ return _url;} set{ _url=value;} }
    private string _url;
  
    public long ByteCount { get { return _byteCount; } set{ _byteCount=value;} }
    private long _byteCount;
  
    public DownloadEndEventArgs( string url, long size  ){ this._url = url; this._byteCount=size; }
}
  
public class DownloadingEventArgs
{
    public string Url{ get{ return _url;} set{ _url=value;} }
    private string _url;
  
    public double Percent { get { return _percent; } set{ _percent=value;} }
    private double _percent;
  
    public DownloadingEventArgs( string url, double percent  ){ this._url = url; this._percent=percent; }
}
  
  
public class Crawler
{
  
    public event DownloadStartHandler DownloadStart;  // 声明事件
    public event DownloadEndHandler DownloadEnd;  // 声明事件
    public event DownloadingHandler Downloading;  // 声明事件
  
    public string Name { get{return name;} set{ name=value;} }
    private string name;
    private string site;
  
      
    public Crawler( string name, string site )
    {
        this.name = name;
        this.site = site;
    }
  
  
    public void Craw()
    {   
        while( true )
        {
            string url = GetNextUrl();
            if( url == null ) break;
            long size = GetSizeOfUrl( url );
  
            if( DownloadStart != null ) //下载开始的事件发生
            {
                DownloadStart( this, new DownloadStartEventArgs(url));
            }
              
            for( long i=0; i<size+1024; i+=1024 )
            {
                //下载数据。。。
                System.Threading.Thread.Sleep( 100 );
                double percent = (int)(i*100.0/size);
                if( percent>100) percent=100;
                  
                if( Downloading != null ) //下载数据的事件发生
                {
                    Downloading( this, new DownloadingEventArgs(url, percent));
                }
            }
  
            if( DownloadEnd != null ) //下载结束的事件发生
            {
                DownloadEnd( this, new DownloadEndEventArgs(url, size));
            }
        }
  
    }
    private string GetNextUrl()
    {
        int a = rnd.Next(10);
        if( a == 0 ) return null;
        return site + "/Page" + a + ".htm";
    }
    private long GetSizeOfUrl( string url)
    {
        return rnd.Next(3000 * url.Length);
    }
    private Random rnd = new Random();
}
  
class Test
{
    static void Main()
    {
        Crawler crawler = new Crawler("Crawer101", "http://www.pku.edu.cn");
  
        crawler.DownloadStart += new DownloadStartHandler( ShowStart ); //注册事件
        crawler.DownloadEnd += new DownloadEndHandler( ShowEnd );
        crawler.Downloading += new DownloadingHandler( ShowPercent );
          
          
        crawler.Craw();
    }
  
    static void ShowStart(object sender, DownloadStartEventArgs e){
        Console.WriteLine( (sender as Crawler).Name + "开始下载" + e.Url );
    }
    static void ShowEnd(object sender, DownloadEndEventArgs e){
        Console.WriteLine( "\n\r下载" + e.Url + "结束,其下载" + e.ByteCount + "字节" );
    }
    static void ShowPercent(object sender, DownloadingEventArgs e){
        Console.Write( "\r下载" + e.Url + "......." + e.Percent + "%" );
          
    }
  
  
}

 

If opportunity doesn’t knock, build a door
posted on 2015-01-19 16:21  博雅居  阅读(184)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3