有的时候我们需要在网页里读取论坛的信息,在传统ASP的时候我们使用的是JS或者是IFRAME,这两种方式都不是很方便,而且对搜索引擎不友好。现在有了.Net,我们有了另一种方式。
要求:论坛需要提供RSS支持。
代码如下:
#region task class
//这是一个任务类,执行具体的任务
public class RssAsyncTask
{
private String _rssContent;
private AsyncTaskDelegate _dlgt;
private string rssUrl;
private bool _success;
public bool IsSuccess
{
get
{
return _success;
}
}
public RssAsyncTask(string rssUrl)
{
this.rssUrl = rssUrl;
}
// Create delegate.
protected delegate void AsyncTaskDelegate();
public String GetRssContent()
{
return _rssContent;
}
public void DoTheAsyncTask()
{
// Introduce an artificial delay to simulate a delayed
// asynchronous task. Make this greater than the
// AsyncTimeout property.
WebClient wc = new WebClient();
try
{
_rssContent = wc.DownloadString(rssUrl);
_success = true;
}
catch (Exception e)
{
_rssContent = e.Message;
}
finally
{
wc.Dispose();
}
//Thread.Sleep(TimeSpan.FromSeconds(5.0));
}
// Define the method that will get called to
// start the asynchronous task.
public IAsyncResult OnBegin(object sender, EventArgs e,
AsyncCallback cb, object extraData)
{
//_rssContent = "Beginning async task.";
_dlgt = new AsyncTaskDelegate(DoTheAsyncTask);
IAsyncResult result = _dlgt.BeginInvoke(cb, extraData);
return result;
}
// Define the method that will get called when
// the asynchronous task is ended.
public void OnEnd(IAsyncResult ar)
{
//_rssContent = "Asynchronous task completed.";
_dlgt.EndInvoke(ar);
}
// Define the method that will get called if the task
// is not completed within the asynchronous timeout interval.
public void OnTimeout(IAsyncResult ar)
{
_rssContent = "Ansynchronous task failed to complete " +
"because it exceeded the AsyncTimeout parameter.";
}
}
#endregion