首页 / 网页编程 / ASP.NET / 在asp.net页面中使用异步同步rss
        
            在asp.net页面中使用异步同步rss2011-02-11有的时候我们需要在网页里读取论坛的信息,在传统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