繁体中文
设为首页
加入收藏
当前位置:.Net技术首页 >> 算法/线程 >> 线程池跟自定义事件的应用例子

线程池跟自定义事件的应用例子

2004-10-01 08:26:10  作者:  来源:互联网  浏览次数:33  文字大小:【】【】【
简介:using System; using System.Threading; using System.Net; using System.Text; using System.Text.RegularExpressions; using System.IO; namespace ThreadPoolDelegate {     //public d...

using System;

using System.Threading;

using System.Net;

using System.Text;

using System.Text.RegularExpressions;

using System.IO;

namespace ThreadPoolDelegate

{

//public delegate void ReceiveCompletedEventHandler(string url,string title,string sourcecode);

public delegate void ReceiveCompletedEventHandler(object sender,ReceiveCompletedEventArgs e);

///

/// Class1 的摘要说明。

///

public class Class1

{

public event ReceiveCompletedEventHandler ReceiveCompletedEvent;

public Class1()

{

//

// TODO: 在此处添加构造函数逻辑

//

}

public void ReadSourceCode(object o)

{

string url = (string)o;

string title = "";

string sourcecode = "";

WebClient wc = new WebClient();

byte[] data = wc.DownloadData(url);

sourcecode = Encoding.Default.GetString(data);

title = this.GetPageTitle(sourcecode);

if (ReceiveCompletedEvent != null)

{

//ReceiveCompletedEvent(url,title,sourcecode);

ReceiveCompletedEvent(this,new ReceiveCompletedEventArgs(url,title,sourcecode));

}

}

public void ReadSourceCode(object o,bool timeout)

{

string url = (string)o;

string title = "";

string sourcecode = "";

WebClient wc = new WebClient();

byte[] data = wc.DownloadData(url);

sourcecode = Encoding.Default.GetString(data);

title = this.GetPageTitle(sourcecode);

if (ReceiveCompletedEvent != null)

{

//ReceiveCompletedEvent(url,title,sourcecode);

ReceiveCompletedEvent(this,new ReceiveCompletedEventArgs(url,title,sourcecode));

}

}

private string GetPageTitle(string str)

{

string lTitle = "";

string lPattern = "(?:<\\s*title\\s*>(?[^<]+))";

Regex rx = new Regex(lPattern, RegexOptions.IgnoreCase | RegexOptions.Compiled );

Match mt = rx.Match(str);

if ( mt.Success )

try

{

lTitle = mt.Groups["t"].Value.ToString();

}

catch

{

lTitle ="";

}

else

lTitle = "";

return lTitle;

}

}

public class test

{

static ManualResetEvent ev = new ManualResetEvent(false);

private static int intCount;

private static DateTime dtStart = DateTime.Now;

public static void Main(string[] args)

{

Class1 c = new Class1();

c.ReceiveCompletedEvent += new ReceiveCompletedEventHandler(WriteOut);

if (args.Length >=1)

{

for (int i=0;i

{

//ThreadPool.QueueUserWorkItem(new WaitCallback(c.ReadSourceCode),args[i]);

ThreadPool.RegisterWaitForSingleObject(ev,new WaitOrTimerCallback(c.ReadSourceCode),args[i],3000,true);

intCount++;

}

ev.WaitOne();

}

else

{

Console.WriteLine("you must pass an argument at least ");

}

}

private static void WriteOut(object sender,ReceiveCompletedEventArgs e)

{

try

{

intCount--;

Console.WriteLine("正在执行......{0}",e.URL);

FileStream fs = new FileStream(@"c:\"+e.Title+".txt",FileMode.Create,FileAccess.Write);

StreamWriter sw = new StreamWriter(fs);

sw.WriteLine(e.URL);

sw.WriteLine();

sw.WriteLine(e.Title);

sw.WriteLine();

sw.WriteLine(e.SourceCode);

sw.WriteLine();

sw.Flush();

fs.Flush();

sw.Close();

fs.Close();

Console.WriteLine("执行完成......{0}",e.URL);

if(intCount == 0)

{

Console.WriteLine("程序执行完成.....");

TimeSpan tsSpent = DateTime.Now.Subtract(dtStart);

Console.WriteLine("程序执行时间......{0}毫秒",tsSpent.TotalMilliseconds);

Console.WriteLine("程序在退出之前等待5秒,only for demo");

Thread.Sleep(5000);

ev.Set();

}

}

catch(Exception ex)

{

throw new Exception(ex.Message);

}

}

/*

private static void WriteOut(string url,string title,string sourcecode)

{

intCount--;

FileStream fs = new FileStream(@"c:\"+title+".txt",FileMode.Create,FileAccess.Write);

StreamWriter sw = new StreamWriter(fs);

sw.WriteLine(url);

sw.WriteLine();

sw.WriteLine(title);

sw.WriteLine();

sw.WriteLine(sourcecode);

sw.WriteLine();

sw.Flush();

fs.Flush();

sw.Close();

fs.Close();

Console.WriteLine("执行完成......{0}",e.URL);

if(intCount == 0)

{

Console.WriteLine("程序执行完成.....");

TimeSpan tsSpent = DateTime.Now.Subtract(dtStart);

Console.WriteLine("程序执行时间......{0}毫秒",tsSpent.TotalMilliseconds);

Console.WriteLine("程序在退出之前等待10秒,only for demo");

Thread.Sleep(10000);

ev.Set();

}

}

*/

}

public class ReceiveCompletedEventArgs : System.EventArgs

{

string _url;

string _title;

string _sourcecode;

public string URL

{

get

{

return _url;

}

}

public string Title

{

get

{

return _title;

}

}

public string SourceCode

{

get

{

return _sourcecode;

}

}

public ReceiveCompletedEventArgs(string url,string title,string sourcecode)

{

this._url = url;

this._title = title;

this._sourcecode = sourcecode;

}

}

}

这里定义了两种委托的方式,大家随便看看

责任编辑:admin
相关文章