前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MSDN官方的ASP.Net异步页面的经典示例代码

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

作者头像
菩提树下的杨过
发布2018-01-24 14:26:20
发布2018-01-24 14:26:20
1.1K00
代码可运行
举报
运行总次数:0
代码可运行

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

代码语言:javascript
代码运行次数:0
运行
复制
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绑定到指定控件上

代码语言:javascript
代码运行次数:0
运行
复制
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

代码语言:javascript
代码运行次数:0
运行
复制
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,但换了一种方法

代码语言:javascript
代码运行次数:0
运行
复制
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处理

代码语言:javascript
代码运行次数:0
运行
复制
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";

    }

}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2008-03-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档