博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

asp.net异步处理

Posted on 2009-07-11 20:30  冷咖啡(子锡)  阅读(193)  评论(0编辑  收藏  举报
程序代码 程序代码
一.页面异步调用

前台

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Async="true" Trace="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label><br />
        <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label><br />
        <asp:TextBox ID="TextBox1" runat="server" ReadOnly="true" columns="80" rows="25" TextMode="MultiLine"></asp:TextBox><br />
        <br />
        &nbsp;</div>
    </form>
</body>
</html>
后台:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page
{
    //页面异步处理
    System.Net.WebRequest myRequest = null; //获取网络资源
    protected void Page_Load(object sender, EventArgs e)
    {
        BeginEventHandler bh = new BeginEventHandler(this.BeginGetAsyncData);
        EndEventHandler eh = new EndEventHandler(this.EndGetAsyncData);
        AddOnPreRenderCompleteAsync(bh, eh);
        string address = "http://www.hao123.com";
        myRequest = System.Net.WebRequest.Create(address);
    }

    IAsyncResult BeginGetAsyncData(Object src, EventArgs args, AsyncCallback cb, Object state)
    {
        Trace.Warn("BeginGetAsyncData is Called");
        Label1.Text = "BeginGetAsyncData: thread #" + System.Threading.Thread.CurrentThread.GetHashCode();
        return myRequest.BeginGetResponse(cb, state); //异步请求
    }

    void EndGetAsyncData(IAsyncResult ar)
    {
        Trace.Warn("EndGetAsyncData is Called");
        Label2.Text = "EndGetAsyncData: thread #" + System.Threading.Thread.CurrentThread.GetHashCode();

        System.Net.WebResponse myResponse = myRequest.EndGetResponse(ar);   //获取请求结果
        TextBox1.Text = new System.IO.StreamReader(myResponse.GetResponseStream()).ReadToEnd();
        myResponse.Close();
    }
}

程序代码 程序代码
对比--页面同步调用

前台

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" Async="true"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /><br />
        <br />
        <asp:TextBox ID="TextBox1" runat="server" TextMode="MultiLine" Height="521px" Width="566px"></asp:TextBox>&nbsp;</div>
    </form>
</body>
</html>
后台

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        System.Net.WebRequest wr = System.Net.WebRequest.Create("http://www.baidu.com");
        System.Net.WebResponse wb2 = wr.GetResponse();
        TextBox1.Text = new System.IO.StreamReader(wb2.GetResponseStream()).ReadToEnd();
      
    }
}