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 调用(不确定我在这里是否正确)。

我真的很感激回复。

谢谢!纳达夫

4

2 回答 2

1

网页不像传统的网页表单。

您不能将标签设置为某个值,然后在同一个回调中将该值更改为其他值并同时出现。

你需要做的是使用一些ajax。简单的方法是添加一个更新面板并走这条路。基本上,您可以通过 javascript 将标签设置为“正在启动进程...”,然后在回调完成后让面板更改标签。

或者,您可以不使用 ajax 来实现;但是您再次通过一些 javascript 设置标签。然后让你的回调例程重写它。

于 2012-04-10T18:29:29.073 回答
0

我认为您需要阅读有关页面生命周期的信息。很高兴您正在更新您的标签,但由于这是网络,您的数据在所有代码运行之前不会返回浏览器。因此,您无法更新尚未发送到浏览器的页面上尚不存在的标签;)

我认为 JS 是您的解决方案(不是该领域的专家),或者可能是一些将查询进程运行时的 ajax,以及在另一个线程上运行的进程?

于 2012-04-10T18:27:09.787 回答