2010-07-27 47 views
1

我认为这对你来说是一个简单的问题。在这里,我们去:ASP C#更新内容

在我的.aspx页面中,我有一个标签Label1的和一个按钮Button1的通过更新面板所包围。

上的按钮即可调用代码隐藏方法如下所示:

protected void Click(object sender, EventArgs e) { 
    ThreadProc("Hello"); 
    Thread.Sleep(2000); 
    ThreadProc("Hello2"); 
    Thread.Sleep(2000); 
    ThreadProc("Hello3"); 
} 
void ThreadProc(string info) { 
    Label1.Text = info; 
    // UpdatePanel1.Update(); 
} 

我想看到的是,该标签是根据代码的功能更新和显示(呈现) 。所以应该你好Hello2 2秒,最后Hello3应显示。 看来只有最后的Hello3被渲染。有人能解释为什么会发生这种情况,以及我如何实现我的想法?

的总体任务,我试图做到的是在按钮上点击调用查询不同的网页多线程功能。每当一个工作线程从他的任务中返回时,它应该用新添加的记录更新一个gridview。在这里,问题是一样的:只有在所有线程完成他们的工作之后,webpart才会更新。

非常感谢您的帮助!

干杯 克里斯托夫

回答

6

因为代码的Web服务器上运行,它渲染的最后一页,并将其发送到客户端的Web浏览器之前处理整个方法Click()。因此,您只能看到最终结果,其中“Hello3”为Label1.Text

那Thread.sleep代码(2000)对你的代码的作用是从Web服务器的HTTP响应需要4.x版秒而不是只有一秒钟的一小部分,如果你离开它了。

但是,如果你想看到的每个更新到Label1.Text,你可以做到这一点与异步AJAX调用。

+0

其中一个upvotes给了我1000分! :) – JohnB 2010-07-27 18:27:30

+0

非常感谢您的澄清。 顺便说一下,我使用essentialObjects ProgressBar + JavaScript实现了我的任务。谢谢 – chr1s 2010-07-28 06:54:48

0

其实这段代码的功能如下:

  • 的页面被请求
  • 在服务器中,标签被更新几次
  • 的页面是配上标签的最后一个值。

客户端只得到最后的值,因为这段代码的输出仅仅是静态的HTML

什么你尽力去完成,必须在客户端编码。你可以使用JavaScript来完成这种事情。