C# 获取数据时显示进度标签
以下是我试图做到的:C# 获取数据时显示进度标签,c#,asp.net,C#,Asp.net,以下是我试图做到的: 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();
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";
}
但点击按钮,它会直接显示数据
你知道我做错了什么吗
在t.Start()之后,谢谢你代码>你需要做检查的东西…大致如下:
while (!t.Completed) // pseudo
{
// wait
Thread.Sleep(10);
}
否则,线程会启动并开始执行,而主线程则会崩溃。我认为您误解了处理ASP.NET请求时服务器端线程与浏览器端体验之间的关系。具体来说,对于给定的HttpRequest(在您的示例中,请求是回发,它会触发btn_Click事件),将只有一个响应。不管您在服务器端执行什么线程操作,这都是正确的
在您的示例中,您似乎希望服务器响应浏览器,lblstatus的值为“获取数据…”。稍后,当操作完成时,服务器将再次“响应”浏览器,并将lblstatus的值作为“gotdata”。由于Http通信的“握手”性质,这将不起作用:一个请求将导致一个响应(因此,lblSatus只有一个值)
您试图做的事情(在长时间运行的操作中为最终用户提供一个逻辑“进度条”)是一个常见的需求。不幸的是,我知道在ASP.NET中没有简单的内置方法来实现这一点。我怀疑大多数人都是通过轮询模型完成的:浏览器启动操作,服务器以某种异步方式启动操作,不会延迟发送回浏览器的响应。然后浏览器定期(最有可能通过javascript)返回服务器,以获取操作进度的更新。这可能是一篇很好的帖子,可以阅读他在其中的Join()
,这将做同样的事情。是的……但这将为OP提供一种方法来执行中的其他功能,而不能使用Join()
执行。现在,OP需要对Fetch方法进行一些调试。在这部分代码上,我们真的帮不了什么忙……IMO。