获取数据时显示进度标签
本文关键字:标签 显示 数据 获取 | 更新日期: 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)返回服务器以获取操作进度的更新。