다음을 통해 공유


Page.AddOnPreRenderCompleteAsync 메서드

정의

비동기 페이지에 대한 시작 및 종료 이벤트 처리기 대리자를 등록합니다.

오버로드

AddOnPreRenderCompleteAsync(BeginEventHandler, EndEventHandler)

비동기 페이지에 대한 상태 정보를 필요로 하지 않는 시작 및 종료 이벤트 처리기 대리자를 등록합니다.

AddOnPreRenderCompleteAsync(BeginEventHandler, EndEventHandler, Object)

비동기 페이지에 대한 시작 및 종료 이벤트 처리기 대리자를 등록합니다.

AddOnPreRenderCompleteAsync(BeginEventHandler, EndEventHandler)

비동기 페이지에 대한 상태 정보를 필요로 하지 않는 시작 및 종료 이벤트 처리기 대리자를 등록합니다.

public:
 void AddOnPreRenderCompleteAsync(System::Web::BeginEventHandler ^ beginHandler, System::Web::EndEventHandler ^ endHandler);
public void AddOnPreRenderCompleteAsync (System.Web.BeginEventHandler beginHandler, System.Web.EndEventHandler endHandler);
member this.AddOnPreRenderCompleteAsync : System.Web.BeginEventHandler * System.Web.EndEventHandler -> unit
Public Sub AddOnPreRenderCompleteAsync (beginHandler As BeginEventHandler, endHandler As EndEventHandler)

매개 변수

beginHandler
BeginEventHandler

BeginEventHandler 메서드의 대리자입니다.

endHandler
EndEventHandler

EndEventHandler 메서드의 대리자입니다.

예외

<async> 페이지 지시문이 true로 설정되지 않은 경우

또는

AddOnPreRenderCompleteAsync(BeginEventHandler, EndEventHandler) 메서드가 PreRender 이벤트 다음에 호출된 경우

BeginHandler 또는 EndHandlernull인 경우

예제

다음 코드 예제에서는 비동기 요청을 사용하여 로컬 웹 서버의 기본 페이지의 HTML 소스 코드를 컨트롤에 TextBox 표시합니다.

중요

이 예제에는 사용자 입력을 허용하는 텍스트 상자가 있으므로 보안상 위험할 수 있습니다. 기본적으로 ASP.NET 웹 페이지는 사용자 입력 내용에 스크립트 또는 HTML 요소가 포함되어 있지 않은지 확인합니다. 자세한 내용은 Script Exploits Overview를 참조하세요.

<%@ page language="C#" Async="true"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
  System.Net.WebRequest myRequest;

  void Page_Load(object sender, EventArgs e)
  {
    Label1.Text = "Page_Load: thread #" + System.Threading.Thread.CurrentThread.GetHashCode();

    BeginEventHandler bh = new BeginEventHandler(this.BeginGetAsyncData);
    EndEventHandler eh = new EndEventHandler(this.EndGetAsyncData);

    AddOnPreRenderCompleteAsync(bh, eh);

    // Initialize the WebRequest.
    string address = "http://localhost/";

    myRequest = System.Net.WebRequest.Create(address);
  }

  IAsyncResult BeginGetAsyncData(Object src, EventArgs args, AsyncCallback cb, Object state)
  {
    Label2.Text = "BeginGetAsyncData: thread #" + System.Threading.Thread.CurrentThread.GetHashCode();
    return myRequest.BeginGetResponse(cb, state);
  }

  void EndGetAsyncData(IAsyncResult ar)
  {
    Label3.Text = "EndGetAsyncData: thread #" + System.Threading.Thread.CurrentThread.GetHashCode();

    System.Net.WebResponse myResponse = myRequest.EndGetResponse(ar);

    result.Text = new System.IO.StreamReader(myResponse.GetResponseStream()).ReadToEnd();
    myResponse.Close();
  }

</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
  <head runat="server">
    <title>
      Page.AddOnPreRenderCompleteAsync Example</title>
  </head>
  <body>
    <form id="form1" runat="server">
      <asp:label id="Label1" runat="server">
        Label 1</asp:label><br />
      <asp:label id="Label2" runat="server">
        Label 2</asp:label><br />
      <asp:label id="Label3" runat="server">
        Label 3</asp:label><br />
      <asp:textbox id="result" runat="server" textMode="multiLine" ReadOnly="true" columns="80" rows="25" />
    </form>
  </body>
</html>
<%@ page language="VB" Async="true"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
  Dim myRequest As System.Net.WebRequest
  
  Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
    Label1.Text = "Page_Load: Thread #" & System.Threading.Thread.CurrentThread.GetHashCode()
    
    Dim bh As New BeginEventHandler(AddressOf Me.BeginGetAsyncData)
    Dim eh As New EndEventHandler(AddressOf Me.EndGetAsyncData)
    
    Me.AddOnPreRenderCompleteAsync(bh, eh)
    
    ' Initialize the WebRequest object.
    Dim address As String
    address = "http://localhost/"
    myRequest = System.Net.WebRequest.Create(address)
    
  End Sub
  
  Function BeginGetAsyncData(ByVal src As Object, ByVal args As EventArgs, ByVal cb As AsyncCallback, ByVal state As Object) As IAsyncResult
    Label2.Text = "BeginGetAsyncData: Thread #" & System.Threading.Thread.CurrentThread.GetHashCode()
    Return Me.myRequest.BeginGetResponse(cb, state)
  End Function
  
  Sub EndGetAsyncData(ByVal ar As IAsyncResult)
    Label3.Text = "EndGetAsyncData: Thread #" & System.Threading.Thread.CurrentThread.GetHashCode()
    
    Dim myResponse As System.Net.WebResponse
    myResponse = Me.myRequest.EndGetResponse(ar)
    
    Dim reader As New System.IO.StreamReader(myResponse.GetResponseStream())
    result.Text = reader.ReadToEnd()
    myResponse.Close()
  End Sub
  
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
  <head runat="server">
    <title>
      Page.AddOnPreRenderCompleteAsync Example</title>
  </head>
  <body>
    <form id="form1" runat="server">
      <asp:label id="Label1" runat="server">
        Label 1</asp:label><br />
      <asp:label id="Label2" runat="server">
        Label 2</asp:label><br />
      <asp:label id="Label3" runat="server">
        Label 3</asp:label><br />
      <asp:textbox id="result" runat="server" textMode="multiLine" ReadOnly="true" columns="80" rows="25" />
    </form>
  </body>
</html>

설명

메서드를 AddOnPreRenderCompleteAsync 사용하여 비동기 웹 페이지에 처리기를 추가합니다.

여러 비동기 처리기를 등록할 수 있습니다. 그러나 한 번에 하나의 처리기만 실행됩니다. 여러 비동기 메서드를 동시에 처리하려면 단일 BeginEventHandler 메서드를 사용하고 해당 처리기에서 여러 비동기 작업을 시작해야 합니다.

비동기 처리기는 및 PreRenderComplete 이벤트 간에 PreRender 호출됩니다.

먼저 이벤트를 통해 PreRender 모든 Page 이벤트가 실행되고 등록된 BeginEventHandler 각 메서드가 호출됩니다. 처리기가 완료되면 해당 EndEventHandler 메서드가 호출됩니다. 비동기 처리기가 여러 대 있는 경우 다음 처리기가 호출됩니다.

등록된 비동기 이벤트 처리기가 호출된 후 나머지 페이지 이벤트가 이벤트부터 PreRenderComplete 호출됩니다.

추가 정보

적용 대상

AddOnPreRenderCompleteAsync(BeginEventHandler, EndEventHandler, Object)

비동기 페이지에 대한 시작 및 종료 이벤트 처리기 대리자를 등록합니다.

public:
 void AddOnPreRenderCompleteAsync(System::Web::BeginEventHandler ^ beginHandler, System::Web::EndEventHandler ^ endHandler, System::Object ^ state);
public void AddOnPreRenderCompleteAsync (System.Web.BeginEventHandler beginHandler, System.Web.EndEventHandler endHandler, object state);
member this.AddOnPreRenderCompleteAsync : System.Web.BeginEventHandler * System.Web.EndEventHandler * obj -> unit
Public Sub AddOnPreRenderCompleteAsync (beginHandler As BeginEventHandler, endHandler As EndEventHandler, state As Object)

매개 변수

beginHandler
BeginEventHandler

BeginEventHandler 메서드의 대리자입니다.

endHandler
EndEventHandler

EndEventHandler 메서드의 대리자입니다.

state
Object

이벤트 처리기에 대한 상태 정보가 들어 있는 개체입니다.

예외

<async> 페이지 지시문이 true로 설정되지 않은 경우

또는

AddOnPreRenderCompleteAsync(BeginEventHandler, EndEventHandler) 메서드가 PreRender 이벤트 다음에 호출된 경우

BeginHandler 또는 EndHandlernull인 경우

예제

다음 코드 예제에서는 비동기 요청을 사용하여 로컬 웹 서버의 기본 페이지의 HTML 소스 코드를 컨트롤에 TextBox 표시합니다.

중요

이 예제에는 사용자 입력을 허용하는 텍스트 상자가 있으므로 보안상 위험할 수 있습니다. 기본적으로 ASP.NET 웹 페이지는 사용자 입력 내용에 스크립트 또는 HTML 요소가 포함되어 있지 않은지 확인합니다. 자세한 내용은 Script Exploits Overview를 참조하세요.

<%@ page language="C#" Async="true"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
  System.Net.WebRequest myRequest;

  void Page_Load(object sender, EventArgs e)
  {
    Label1.Text = "Page_Load: thread #" + System.Threading.Thread.CurrentThread.GetHashCode();

    BeginEventHandler bh = new BeginEventHandler(this.BeginGetAsyncData);
    EndEventHandler eh = new EndEventHandler(this.EndGetAsyncData);

    AddOnPreRenderCompleteAsync(bh, eh);

    // Initialize the WebRequest.
    string address = "http://localhost/";

    myRequest = System.Net.WebRequest.Create(address);
  }

  IAsyncResult BeginGetAsyncData(Object src, EventArgs args, AsyncCallback cb, Object state)
  {
    Label2.Text = "BeginGetAsyncData: thread #" + System.Threading.Thread.CurrentThread.GetHashCode();
    return myRequest.BeginGetResponse(cb, state);
  }

  void EndGetAsyncData(IAsyncResult ar)
  {
    Label3.Text = "EndGetAsyncData: thread #" + System.Threading.Thread.CurrentThread.GetHashCode();

    System.Net.WebResponse myResponse = myRequest.EndGetResponse(ar);

    result.Text = new System.IO.StreamReader(myResponse.GetResponseStream()).ReadToEnd();
    myResponse.Close();
  }

</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
  <head runat="server">
    <title>
      Page.AddOnPreRenderCompleteAsync Example</title>
  </head>
  <body>
    <form id="form1" runat="server">
      <asp:label id="Label1" runat="server">
        Label 1</asp:label><br />
      <asp:label id="Label2" runat="server">
        Label 2</asp:label><br />
      <asp:label id="Label3" runat="server">
        Label 3</asp:label><br />
      <asp:textbox id="result" runat="server" textMode="multiLine" ReadOnly="true" columns="80" rows="25" />
    </form>
  </body>
</html>
<%@ page language="VB" Async="true"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
  Dim myRequest As System.Net.WebRequest
  
  Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
    Label1.Text = "Page_Load: Thread #" & System.Threading.Thread.CurrentThread.GetHashCode()
    
    Dim bh As New BeginEventHandler(AddressOf Me.BeginGetAsyncData)
    Dim eh As New EndEventHandler(AddressOf Me.EndGetAsyncData)
    
    Me.AddOnPreRenderCompleteAsync(bh, eh)
    
    ' Initialize the WebRequest object.
    Dim address As String
    address = "http://localhost/"
    myRequest = System.Net.WebRequest.Create(address)
    
  End Sub
  
  Function BeginGetAsyncData(ByVal src As Object, ByVal args As EventArgs, ByVal cb As AsyncCallback, ByVal state As Object) As IAsyncResult
    Label2.Text = "BeginGetAsyncData: Thread #" & System.Threading.Thread.CurrentThread.GetHashCode()
    Return Me.myRequest.BeginGetResponse(cb, state)
  End Function
  
  Sub EndGetAsyncData(ByVal ar As IAsyncResult)
    Label3.Text = "EndGetAsyncData: Thread #" & System.Threading.Thread.CurrentThread.GetHashCode()
    
    Dim myResponse As System.Net.WebResponse
    myResponse = Me.myRequest.EndGetResponse(ar)
    
    Dim reader As New System.IO.StreamReader(myResponse.GetResponseStream())
    result.Text = reader.ReadToEnd()
    myResponse.Close()
  End Sub
  
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
  <head runat="server">
    <title>
      Page.AddOnPreRenderCompleteAsync Example</title>
  </head>
  <body>
    <form id="form1" runat="server">
      <asp:label id="Label1" runat="server">
        Label 1</asp:label><br />
      <asp:label id="Label2" runat="server">
        Label 2</asp:label><br />
      <asp:label id="Label3" runat="server">
        Label 3</asp:label><br />
      <asp:textbox id="result" runat="server" textMode="multiLine" ReadOnly="true" columns="80" rows="25" />
    </form>
  </body>
</html>

설명

메서드를 AddOnPreRenderCompleteAsync 사용하여 상태 정보가 필요한 처리기를 비동기 웹 페이지에 추가합니다. 에 전달 된 개체를 state 매개 변수는 애플리케이션에 지정 된 이벤트 처리기 대리자 간에 정보를 전송 해야 하는 개체 수를 beginHandlerendHandler 매개 변수입니다.

여러 비동기 처리기를 등록할 수 있습니다. 그러나 한 번에 하나의 처리기만 실행됩니다. 여러 비동기 메서드를 동시에 처리하려면 단일 BeginEventHandler 메서드를 사용하고 해당 처리기에서 여러 비동기 작업을 시작해야 합니다.

비동기 처리기는 및 PreRenderComplete 이벤트 간에 PreRender 호출됩니다.

먼저 이벤트를 통해 PreRender 모든 Page 이벤트가 실행되고 등록된 BeginEventHandler 각 메서드가 호출됩니다. 처리기가 완료되면 해당 EndEventHandler 메서드가 호출됩니다. 비동기 처리기가 여러 대 있는 경우 다음 처리기가 호출됩니다.

등록된 비동기 이벤트 처리기가 호출된 후 나머지 페이지 이벤트가 이벤트부터 PreRenderComplete 호출됩니다.

적용 대상