获取数据时显示进度标签

本文关键字:标签 显示 数据 获取 | 更新日期: 2023-09-27 18:08:15

我是这样做的:

 void Fetch()
    {
        //Code To Fetch Data        
    }
    protected void btn_Click(object sender, EventArgs e)
    {
        lblSatus.Text = "Fetching Data...";
        Thread t = new Thread(Fetch);
        t.Start();           
        t.Join();
        lblSatus.Text = "Got Data";
    }

但是当点击按钮时,它直接显示GotData。

你知道我哪里做错了吗?

谢谢

获取数据时显示进度标签

t.Start();之后,你需要一些东西来检查…沿着以下行:

while (!t.Completed) // pseudo
{
    // wait
    Thread.Sleep(10);
}

我想你在处理ASP时误解了服务器端线程之间的关系。NET请求,以及在浏览器端的体验。具体来说,对于给定的HttpRequest(在您的示例中,请求是回发,它触发btn_Click事件),将有且只有一个响应。不管你在服务器端做什么线程操作,这都是正确的。

在您的示例中,看起来您希望服务器响应浏览器,使用lblstatus的值为"抓取数据…"。稍后,当操作完成后,服务器将再次"响应"浏览器,lblstatus的值为"Got Data"。这是行不通的,因为Http通信的"握手"性质:一个请求将导致一个响应(因此,lblstatus只有一个值)。

您尝试做的事情(在长时间运行的操作中为最终用户提供逻辑"进度条")是一个常见的需求。不幸的是,我知道在ASP.NET中没有简单的内置方法来做到这一点。我怀疑大多数人都是通过轮询模型来实现的:浏览器发起动作,服务器以某种异步方式启动它,这种方式不会延迟发送回浏览器的响应。然后,浏览器定期(很可能通过javascript)返回服务器以获取操作进度的更新。