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.";
    }
}

クラスはいくつかの作業を行う必要があります(約1分)。ボタンをクリックしてもラベルは変更されず、クラスがジョブを完了した後でのみ、ラベルが「処理完了」に変更されます。

私は本当に長い間解決策を探してきましたが、明確で直接的な答えを見つけることができませんでした。

クラスをスレッドとして実行しようとしましたが、同じ結果が得られました。

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.";
    }
}

私はすでにonClick呼び出しを持っているので、JavaScriptの使用には問題があるようです(ここで正しいかどうかはわかりません)。

返信ありがとうございます。

ありがとう!ナダブ

4

2 に答える 2

1

Webページは、従来のWebフォームとは異なります。

ラベルを特定の値に設定してから、同じコールバック内でその値を別の値に変更して、両方を表示することはできません。

あなたがする必要があるのは、いくつかのajaxを使用することです。簡単な方法は、更新パネルを追加してそのルートに進むことです。基本的には、javascriptを介してラベルを「プロセスを開始しています...」に設定し、コールバックが完了したらパネルにラベルを変更させます。

または、ajaxなしで実行することもできます。ただし、最初にJavaScriptを使用してラベルを設定します。次に、コールバックルーチンに上書きさせます。

于 2012-04-10T18:29:29.073 に答える
0

ページのライフサイクルについて読む必要があると思います。ラベルを更新しているのは良いことですが、これはWebであるため、すべてのコードが実行されるまでデータはブラウザーに戻りません。したがって、ブラウザにまだ送信していないページにまだ存在しないラベルを更新することはできません;)

JSはあなた(その分野の専門家ではない)にとっての解決策だと思いますか、それともプロセスランタイムと別のスレッドで実行されているプロセスを照会するJavaScriptですか?

于 2012-04-10T18:27:09.787 に答える