• 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( "
    
    下载" + e.Url + "结束,其下载" + e.ByteCount + "字节" );
        }
        static void ShowPercent(object sender, DownloadingEventArgs e){
            Console.Write( "
    下载" + e.Url + "......." + e.Percent + "%" );
              
        }
      
      
    }
  • 相关阅读:
    python之----------字符编码具体原理
    css部分复习整理
    秘钥登录服务器执行shell脚本
    idea配置github
    InteliJ IDEA 简单使用:配置项目所需jdk
    IntelliJ IDEA 中安装junit插件
    IDEA 运行maven命令时报错: -Dmaven.multiModuleProjectDirectory system propery is not set
    idea如何编译maven项目
    idea项目左边栏只能看到文件看不到项目结构
    idea如何导入一个maven项目
  • 原文地址:https://www.cnblogs.com/CandiceW/p/4234054.html
Copyright © 2020-2023  润新知