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