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

简介: 示例1.演示异步获取一个网址的内容,处理后显示在OutPut这一Label上  1using System; 2using System.Web; 3using System.Web.UI; 4using System.

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

 1 using  System;
 2 using  System.Web;
 3 using  System.Web.UI;
 4 using  System.Web.UI.WebControls;
 5 using  System.Net;
 6 using  System.IO;
 7 using  System.Text;
 8 using  System.Text.RegularExpressions;
 9
10 public   partial   class  AsyncPage : System.Web.UI.Page
11 {
12    private WebRequest _request;
13
14    void Page_Load (object sender, EventArgs e)
15    {
16        AddOnPreRenderCompleteAsync (
17            new BeginEventHandler(BeginAsyncOperation),
18            new EndEventHandler (EndAsyncOperation)
19        );
20    }

21
22    IAsyncResult BeginAsyncOperation (object sender, EventArgs e, 
23        AsyncCallback cb, object state)
24    {
25        _request = WebRequest.Create("http://msdn.microsoft.com");
26        return _request.BeginGetResponse (cb, state);
27    }

28    void EndAsyncOperation (IAsyncResult ar)
29    {
30        string text;
31        using (WebResponse response = _request.EndGetResponse(ar))
32        {
33            using (StreamReader reader = 
34                new StreamReader(response.GetResponseStream()))
35            {
36                text = reader.ReadToEnd();
37            }

38        }

39
40        Regex regex = new Regex ("href\\s*=\\s*\"([^\"]*)\""
41            RegexOptions.IgnoreCase);
42        MatchCollection matches = regex.Matches(text);
43
44        StringBuilder builder = new StringBuilder(1024);
45        foreach (Match match in matches)
46        {
47            builder.Append (match.Groups[1]);
48            builder.Append("<br/>");
49        }

50
51        Output.Text = builder.ToString ();
52    }

53}

54
55

示例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";
    }

}


目录
相关文章
|
2月前
|
开发框架 .NET 中间件
七天.NET 8操作SQLite入门到实战 - (2)第七天Blazor班级管理页面编写和接口对接
七天.NET 8操作SQLite入门到实战 - (2)第七天Blazor班级管理页面编写和接口对接
|
1月前
|
SQL 设计模式 开发框架
.NET异步有多少种实现方式?(异步编程提高系统性能、改善用户体验)
想要知道.NET异步有多少种实现方式,首先我们要知道.NET提供的执行异步操作的三种模式,然后再去了解.NET异步实现的四种方式。
|
12月前
|
开发框架 数据可视化 前端开发
ASP.NET Core MVC+Quartz实现定时任务可视化管理页面
ASP.NET Core MVC+Quartz实现定时任务可视化管理页面
444 0
|
开发框架 JavaScript .NET
Asp.net C#页面传参的几种方式
Asp.net C#页面传参的几种方式
122 0
mvc.net分页查询案例——前台页面(Index.aspx)
mvc.net分页查询案例——前台页面(Index.aspx)
|
开发框架 JSON 前端开发
【C#】.net core2.1,自定义全局类对API接口和视图页面产生的异常统一处理
在开发一个网站项目时,异常处理和过滤功能是最基础的模块 本篇文章就来讲讲,如何自定义全局异常类来统一处理
225 0
|
开发框架 程序员 API
【C#】.net core2.1,通过扩展状态代码页方法对404页面进行全局捕抓并响应信息
在开发一个网站项目时,除了异常过滤功能模块,还需要有针对404不存在的api接口和页面处理功能 本篇文章就来讲讲,如何自定义全局请求状态类来统一处理
198 0
|
开发框架 .NET Windows
真正解决ASP.NET每一个页面首次访问超级慢的问题
真正解决ASP.NET每一个页面首次访问超级慢的问题
241 0
|
2月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
115 0