我想这对您来说是一个简单的问题。我们开始吧:
在我的 .aspx 页面上,我有一个标签 Label1 和一个被更新面板包围的按钮 Button1。
单击 Button 会调用代码隐藏方法,如下所示:
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();
}
我希望看到的是标签根据代码的作用进行更新和显示(呈现)。所以它应该显示 Hello,Hello2 2 秒,最后应该显示 Hello3。 似乎只渲染了最后一个 Hello3。有人可以解释为什么会发生这种情况以及我如何实现我的想法吗?
我尝试完成的总体任务是单击按钮调用查询不同页面的多线程函数。每当工作线程从他的任务返回时,它应该用新添加的记录更新 gridview。在这里,问题是相同的:只有在所有线程都完成其工作后,webpart 才会更新。
非常感谢您的帮助!
干杯 克里斯托夫
最佳答案
因为代码在 Web 服务器上运行,所以它会在呈现最终页面并将其发送到客户端的 Web 浏览器之前处理整个方法 Click()
。因此,您只能看到最终结果,其中 Label1.Text
为“Hello3”。
Thread.Sleep(2000) 对您的代码的影响是来自 Web 服务器的 HTTP 响应需要 4.x 秒,而不是如果您忽略它则只需要几分之一秒。
但是,如果您想查看 Label1.Text
的每次更新,您可以使用异步 AJAX 调用来实现。
关于c# - ASP C#更新内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3344969/