2016-10-26 2 views
2
여기

는 VB.NET을 사용하여 ASP.NET 1.1으로 작성된 WebService에 대한 예제 코드입니다 WebService에 메소드 호출 :업데이트 UI ASP.NET 컨트롤 - - 비동기 (콜백 접근법)

Public Class WebForm1 
    Inherits System.Web.UI.Page 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
     Dim proxy As New Service1 
     Dim ac As New AsyncCallback(AddressOf MyCallback) 
     Dim ar As IAsyncResult = proxy.BeginAdd(10, 20, ac, proxy) 
     System.Threading.Thread.Sleep(1000) 
    End Sub 

    Public Sub MyCallback(ByVal ar As IAsyncResult) 
     Dim proxy As Service1 = CType(ar.AsyncState, Service1) 
     Dim result As Integer = proxy.EndAdd(ar) 
     Label1.Text = "Result = " & result.ToString() 
    End Sub 

End Class 

Visual Studio.NET 2003 (ASP.NET 1.1/VB.NET)을 사용하고 있습니다. "결과"변수에 올바른 값을 가져 왔습니다. 그러나 그것은 UI 요소 (Label1)를 업데이트하지 않습니다. 나는 그 이유를 안다. UI - MAIN - 쓰레드가 CALLBACK - WORKER - 쓰레드를 사용하는 쓰레드와 다르기 때문에. Visual Studio.NET 2003에서 VB.NET을 사용하여 UI (Label1) 컨트롤을 업데이트 할 수 있도록 샘플 코드를 제공 할 수 있습니까?

감사합니다.

답변

0

답변입니다. 그것은 부정적이지만 대답입니다. 페이지주기가 잘 알려진 단계를 거치기 때문에 ASP.NET Web Forms에서이 작업을 수행 할 수 없으며 그렇게해서는 안됩니다. 페이지 사이클 방법에서 수행 된 비동기/멀티 스레드 프로그래밍이 있어서는 안됩니다. 그리고 확실히 ASP.net 스레드를 잠자 게해서는 안됩니다.

Button1_Click은주기의 일부이며 실행될 때 ASP.net 프레임 워크는 이미 다른 것을 실행합니다. 그리고 비동기 적으로 호출하는 것은 방금 남겨집니다. 코드는 실행되지만 값은 아무 것도 영향을주지 않습니다.

ASP.net 웹 양식에서 비동기 동작을 수행하려는 경우 웹 서비스를 호출 할 클라이언트 측 장치를 포함시켜야합니다. 오래된 프레임 워크에 업데이트 패널이나 AJAX 툴킷이 있다는 것을 확신 할 수 없습니다. Bu는 페이지를 다시로드하지 않고도이를 수행하는 방법입니다. jQuery 나 다른 것을 사용하여 웹 서비스를 호출하십시오. 당신의 예에서 당신이 시도한 것은 막 다른 골목입니다.

심각하게 말하면 새 프레임 워크를 사용하십시오. 적어도 3.5.

관련 문제