Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取数据时显示进度标签_C#_Asp.net - Fatal编程技术网

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。