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

}


目录
相关文章
|
4月前
|
开发框架 JavaScript 前端开发
揭秘:如何让你的asp.net页面变身交互魔术师——先施展JavaScript咒语,再引发服务器端魔法!
【8月更文挑战第16天】在ASP.NET开发中,处理客户端与服务器交互时,常需先执行客户端验证再提交数据。传统上使用ASP.NET Button控件直接触发服务器事件,但难以插入客户端逻辑。本文对比此法与改进方案:利用HTML按钮及JavaScript手动控制表单提交。后者通过`onclick`事件调用JavaScript函数`SubmitForm()`来检查输入并决定是否提交,增强了灵活性和用户体验,同时确保了服务器端逻辑的执行。
51 5
|
1月前
|
消息中间件 Linux iOS开发
.NET 高性能异步套接字库,支持多协议、跨平台、高并发
【11月更文挑战第3天】本文介绍了高性能异步套接字库在网络编程中的重要性,特别是在处理大量并发连接的应用中。重点讨论了 .NET 中的 Socket.IO 和 SuperSocket 两个库,它们分别在多协议支持、跨平台特性和高并发处理方面表现出色。Socket.IO 基于 WebSocket 协议,支持多种通信协议和跨平台运行,适用于实时通信应用。SuperSocket 则通过事件驱动的异步编程模型,实现了高效的高并发处理,适用于需要自定义协议的场景。这些库各有特点,可根据具体需求选择合适的库。
|
2月前
|
网络协议 Unix Linux
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
|
7月前
|
开发框架 .NET 中间件
七天.NET 8操作SQLite入门到实战 - (2)第七天Blazor班级管理页面编写和接口对接
七天.NET 8操作SQLite入门到实战 - (2)第七天Blazor班级管理页面编写和接口对接
159 7
|
4月前
|
开发框架 前端开发 .NET
七天.NET 8操作SQLite入门到实战 - (3)第七天Blazor学生管理页面编写和接口对接
七天.NET 8操作SQLite入门到实战 - (3)第七天Blazor学生管理页面编写和接口对接
|
4月前
|
存储
【Azure 存储服务】.NET7.0 示例代码之上传大文件到Azure Storage Blob (二)
【Azure 存储服务】.NET7.0 示例代码之上传大文件到Azure Storage Blob (二)
|
4月前
|
存储 监控 开发工具
【Azure 存储服务】.NET7.0 示例代码之上传大文件到Azure Storage Blob (一)
【Azure 存储服务】.NET7.0 示例代码之上传大文件到Azure Storage Blob (一)
|
6月前
|
SQL 设计模式 开发框架
.NET异步有多少种实现方式?(异步编程提高系统性能、改善用户体验)
想要知道.NET异步有多少种实现方式,首先我们要知道.NET提供的执行异步操作的三种模式,然后再去了解.NET异步实现的四种方式。
|
开发框架 数据可视化 前端开发
ASP.NET Core MVC+Quartz实现定时任务可视化管理页面
ASP.NET Core MVC+Quartz实现定时任务可视化管理页面
595 0