专栏首页菩提树下的杨过MSDN官方的ASP.Net异步页面的经典示例代码

MSDN官方的ASP.Net异步页面的经典示例代码

示例1.演示异步获取一个网址的内容,处理后显示在OutPut这一Label上

using System;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Net;

using System.IO;

using System.Text;

using System.Text.RegularExpressions;



public partial class AsyncPage : System.Web.UI.Page

{

    private WebRequest _request;



    void Page_Load (object sender, EventArgs e)

    {

        AddOnPreRenderCompleteAsync (

            new BeginEventHandler(BeginAsyncOperation),

            new EndEventHandler (EndAsyncOperation)

        );

    }



    IAsyncResult BeginAsyncOperation (object sender, EventArgs e, 

        AsyncCallback cb, object state)

    {

        _request = WebRequest.Create("http://msdn.microsoft.com");

        return _request.BeginGetResponse (cb, state);

    }

    void EndAsyncOperation (IAsyncResult ar)

    {

        string text;

        using (WebResponse response = _request.EndGetResponse(ar))

        {

            using (StreamReader reader = 

                new StreamReader(response.GetResponseStream()))

            {

                text = reader.ReadToEnd();

            }

        }



        Regex regex = new Regex ("href\\s*=\\s*\"([^\"]*)\"", 

            RegexOptions.IgnoreCase);

        MatchCollection matches = regex.Matches(text);



        StringBuilder builder = new StringBuilder(1024);

        foreach (Match match in matches)

        {

            builder.Append (match.Groups[1]);

            builder.Append("<br/>");

        }



        Output.Text = builder.ToString ();

    }

}

示例2:演示如何异步从数据库查询数据,并将返回的DataReader绑定到指定控件上

using System;

using System.Data;

using System.Data.SqlClient;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.Configuration;



public partial class AsyncDataBind : System.Web.UI.Page

{

    private SqlConnection _connection;

    private SqlCommand _command;

    private SqlDataReader _reader;





    protected void Page_Load(object sender, EventArgs e)

    {

        if (!IsPostBack)

        {

            // Hook PreRenderComplete event for data binding

            this.PreRenderComplete += 

                new EventHandler(Page_PreRenderComplete);



            // Register async methods

            AddOnPreRenderCompleteAsync(

                new BeginEventHandler(BeginAsyncOperation),

                new EndEventHandler(EndAsyncOperation)

            );

        }

    }

    IAsyncResult BeginAsyncOperation (object sender, EventArgs e, 

        AsyncCallback cb, object state)

    {

        string connect = WebConfigurationManager.ConnectionStrings

            ["PubsConnectionString"].ConnectionString;

        _connection = new SqlConnection(connect);

        _connection.Open();

        _command = new SqlCommand(

            "SELECT title_id, title, price FROM titles", _connection);

        return _command.BeginExecuteReader (cb, state);

    }



    void EndAsyncOperation(IAsyncResult ar)

    {

        _reader = _command.EndExecuteReader(ar);

    }



    protected void Page_PreRenderComplete(object sender, EventArgs e)

    {

        Output.DataSource = _reader;

        Output.DataBind();

    }



    public override void Dispose()

    {

        if (_connection != null) _connection.Close();

        base.Dispose();

    }

}

示例3:异步调用WebService

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;



public partial class AsyncWSInvoke1 : System.Web.UI.Page

{

    private WS.PubsWebService _ws;

    private DataSet _ds;



    protected void Page_Load(object sender, EventArgs e)

    {

        if (!IsPostBack)

        {

            // Hook PreRenderComplete event for data binding

            this.PreRenderComplete += 

                new EventHandler(Page_PreRenderComplete);



            // Register async methods

            AddOnPreRenderCompleteAsync(

                new BeginEventHandler(BeginAsyncOperation),

                new EndEventHandler(EndAsyncOperation)

            );

        }

    }



    IAsyncResult BeginAsyncOperation (object sender, EventArgs e, 

        AsyncCallback cb, object state)

    {

        _ws = new WS.PubsWebService();

        // Fix up URL for call to local VWD-hosted Web service

        _ws.Url = new Uri(Request.Url, "Pubs.asmx").ToString();

        _ws.UseDefaultCredentials = true;

        return _ws.BeginGetTitles (cb, state);

    }



    void EndAsyncOperation(IAsyncResult ar)

    {

        _ds = _ws.EndGetTitles(ar);

    }



    protected void Page_PreRenderComplete(object sender, EventArgs e)

    {

        Output.DataSource = _ds;

        Output.DataBind();

    }



    public override void Dispose()

    {

        if (_ws != null) _ws.Dispose();

        base.Dispose();

    }

}

示例4:还是异步调用WebService,但换了一种方法

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;



public partial class AsyncWSInvoke2 : System.Web.UI.Page

{

    private WS.PubsWebService _ws;

    private DataSet _ds;



    protected void Page_Load(object sender, EventArgs e)

    {

        if (!IsPostBack)

        {

            // Hook PreRenderComplete event for data binding

            this.PreRenderComplete += 

                new EventHandler(Page_PreRenderComplete);



            // Call the Web service asynchronously

            _ws = new WS.PubsWebService();

            _ws.GetTitlesCompleted += new 

                WS.GetTitlesCompletedEventHandler(GetTitlesCompleted);

            _ws.Url = new Uri(Request.Url, "Pubs.asmx").ToString();

            _ws.UseDefaultCredentials = true;

            _ws.GetTitlesAsync();

        }

    }



    void GetTitlesCompleted(Object source, 

        WS.GetTitlesCompletedEventArgs e)

    {

        _ds = e.Result;

    }



    protected void Page_PreRenderComplete(object sender, EventArgs e)

    {

        Output.DataSource = _ds;

        Output.DataBind();

    }



    public override void Dispose()

    {

        if (_ws != null) _ws.Dispose();

        base.Dispose();

    }

}

示例5:跟示例1差不多,但是加了TimeOut处理

using System;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Net;

using System.IO;

using System.Text;

using System.Text.RegularExpressions;



public partial class AsyncPageTask : System.Web.UI.Page

{

    private WebRequest _request;



    protected void Page_Load(object sender, EventArgs e)

    {

        PageAsyncTask task = new PageAsyncTask(

            new BeginEventHandler(BeginAsyncOperation),

            new EndEventHandler(EndAsyncOperation),

            new EndEventHandler(TimeoutAsyncOperation),

            null

        );

        RegisterAsyncTask(task);

    }



    IAsyncResult BeginAsyncOperation(object sender, EventArgs e, 

        AsyncCallback cb, object state)

    {

        _request = WebRequest.Create("http://msdn.microsoft.com");

        return _request.BeginGetResponse(cb, state);

    }



    void EndAsyncOperation(IAsyncResult ar)

    {

        string text;

        using (WebResponse response = _request.EndGetResponse(ar))

        {

            using (StreamReader reader = 

                new StreamReader(response.GetResponseStream()))

            {

                text = reader.ReadToEnd();

            }

        }



        Regex regex = new Regex("href\\s*=\\s*\"([^\"]*)\"", 

            RegexOptions.IgnoreCase);

        MatchCollection matches = regex.Matches(text);



        StringBuilder builder = new StringBuilder(1024);

        foreach (Match match in matches)

        {

            builder.Append(match.Groups[1]);

            builder.Append("<br/>");

        }



        Output.Text = builder.ToString();

    }



    void TimeoutAsyncOperation(IAsyncResult ar)

    {

        Output.Text = "Data temporarily unavailable";

    }

}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Silverlight:利用异步加载Xap实现自定义loading效果

    关键点: 1.利用WebClient的DownloadProgressChanged事件更新下载进度 2.下载完成后,分析Xap包的程序集Assembly信息 ...

    菩提树下的杨过
  • .NET:Entity Framework 笔记

    有二年没关注EF,今天无意试了下发现跟主流的Hibernate等ORM框架越来越接近了,先看下Entity类的定义: using System; using S...

    菩提树下的杨过
  • (Head First 设计模式)学习笔记(1)

    把书中开篇duck问题的代码翻译成了c#版: 概述: 某游戏公司要设计一款鸭子的游戏,里面有各种各样的鸭子,有些会飞,有些会叫,但都会游泳。而且不同种类的鸭子...

    菩提树下的杨过
  • 基于windowsphone7的控制ppt播放 第一部分 服务器端

    最近突然想起了一个学长的一个利用手机控制ppt播放的一个创意,并想将其在windows phone7上实现一下。

    magicsoar
  • 基于windowsphone7的控制ppt播放 第一部分 服务器端

    最近突然想起了一个学长的一个利用手机控制ppt播放的一个创意,并想将其在windows phone7上实现一下。 经过几天的努力已经可以控制ppt的播放,暂停,...

    magicsoar
  • Java 字符流操作

         上篇文章Java 字节流操作介绍了java中基本的字节流操作,但是我们常常对于字符操作,如果使用字节流来实现输入输出就显得麻烦,我们可以使用字符流...

    Single
  • 项目练习:自己写一个CheckBoxList,RadioButtonList控件

    1.cshtml模板c#语句后边不要加分号 “ ; ” 2.cshtml文件导入命名空间,命名空间看HtmlHelper的命名空间来确定,结尾也是不添...

    静心物语313
  • 周期性线程池

    ScheduledThreadPoolExecutor:用来处理延时任务或定时任务 定时线程池类的类结构图

    程序员小强
  • 排序算法之希尔、归并、堆和基数排序

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    海仔
  • 插秧、搬砖、线上卖艺……在家的大学生已经"疯"了!

    近日,一条有人欢喜有人愁的微博悄然登上热搜: ? 虽然微博官方配的柠檬脸,表达了众多网友的羡慕嫉妒恨,但奇怪的是,主角大学生们并没有我们想象的那么高兴,反而...

    腾讯NEXT学位

扫码关注云+社区

领取腾讯云代金券