2012-04-10 2 views
0

를 처리하는 동안 다음과 같은 aspx 페이지가 있습니다: 레이블 클래스가

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

<!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="lblStatus" runat="server" Text="Label"> 
     </asp:Label><asp:Button ID="btnRun" runat="server" Text="Button" onclick="btnRun_Click" /> 
    </div> 
    </form> 
</body> 
</html> 

코드 숨김은 다음과 같습니다

public partial class index : System.Web.UI.Page 
{ 
    protected void btnRun_Click(object sender, EventArgs e) 
    { 
     CP CPObj = new CP(); 
     lblStatus.Text = "Starting process.."; 

     CPObj.run(); 
     lblStatus.Text = "Process done."; 
    } 
} 

클래스는 (분에 대한) 몇 가지 작업을 할 필요를 . 버튼을 클릭하면 레이블이 변경되지 않으며 클래스가 작업을 완료 한 후에 만 ​​레이블이 "처리 완료"로 변경됩니다.

저는 정말 오랜 시간 동안 해결책을 찾았지만 명확하고 솔직한 대답을 찾을 수 없었습니다.

클래스를 스레드로 실행하려고 시도했지만 동일한 결과가 나타납니다.

public partial class index : System.Web.UI.Page 
{ 
    protected void btnRun_Click(object sender, EventArgs e) 
    { 
     CP CPObj = new CP(); 
     Thread oThread = new Thread(new ThreadStart(CPObj.run)); 

     lblStatus.Text = "Starting process.."; 

     oThread.Start(); 

     while (!oThread.IsAlive) ; 
     while (oThread.IsAlive) 
     { 
      Thread.Sleep(1000); 
     } 

     lblStatus.Text = "Process done."; 
    } 
} 

JavaScript를 사용하면 이미 onClick 호출이 있기 때문에 문제가있는 것 같습니다 (여기에 올바른지 확실하지 않습니다).

정말 감사드립니다.

감사합니다. Nadav

+1

업데이트 패널과 레이블을 그 안에 추가하기 만하면됩니다. – coder

+0

이것을 위해서는 AJAX를 조사해야합니다. 표준 다시 게시 방식은 실행 경로의 모든 서버 쪽 코드가 실행될 때까지 클라이언트에 데이터를 반환하지 않습니다. 본질적으로 이와 같은 백엔드 프로세스의 경우 AJAX를 사용하여 서버 측 리소스를 호출하여 프로세스를 시작하고 해당 리소스를 폴링하여 프로세스 완료를 원할 수 있습니다. 저는 개인적으로 마이크로 소프트 대신 jQuery의 AJAX 함수를 사용하는 것을 선호하지만, 어떻게 할 것인지는 당신에게 달린 것입니다. – David

답변

0

페이지 수명주기에 대해 읽어야한다고 생각합니다. 라벨을 업데이트하는 것이 좋지만 웹이므로 모든 코드가 실행될 때까지 데이터가 브라우저로 돌아 가지 않습니다. 따라서 아직 브라우저에 보내지 않은 페이지에는 아직 존재하지 않는 라벨을 업데이트 할 수 없습니다.)

JS는 (해당 분야의 전문가가 아닌) 솔루션이거나 프로세스 런타임을 쿼리하는 Ajax와 다른 스레드에서 실행중인 프로세스?

+0

JS 솔루션에 대해 자세히 살펴 보겠습니다. 빠른 응답과 올바른 방향을 제시해 주셔서 감사합니다. – buenon

1

웹 페이지는 전통적인 웹 양식과 다릅니다.

레이블을 일부 값으로 설정 한 다음 동일한 콜백 변경 내에서 다른 값으로 지정하고 둘 다 표시 할 수 없습니다.

당신이해야 할 일은 몇 가지 ajax를 사용하는 것입니다. 간단한 방법은 업데이트 패널을 추가하고 해당 경로로 이동하는 것입니다. 기본적으로 자바 스크립트를 통해 레이블을 "시작 프로세스 ..."로 설정 한 다음 콜백이 완료되면 패널에서 레이블을 변경하게합니다.

아약스가 없어도 가능합니다. 하지만 다시 몇 가지 자바 스크립트를 통해 레이블을 설정합니다. 그런 다음 전화를 걸어 다시 쓰도록하십시오.

+0

할거야. 고마워요 !!! – buenon