c# - ASP C#更新内容

标签 c# multithreading asp.net

我想这对您来说是一个简单的问题。我们开始吧:

在我的 .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();
}

我希望看到的是标签根据代码的作用进行更新和显示(呈现)。所以它应该显示 HelloHello2 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/

相关文章:

c# - 选项预检未在 jQuery 中处理

javascript - 使用 JQuery $.AJAX 调用调用 ASP.NET 函数

html - 如何在保持正确纵横比的同时保存缩略图?

c# - 超时不适用于 WebRequest

c# - 类型为枚举的变量如何获取超出其元素范围的值?

java - 调用 notifyAll() 后线程未唤醒

c# - 过度使用 Interlocked.exchange?

c# - 当可以从用户对象中提取所需的属性时,像 GetPhoneNumberAsync(IdentityUser user) 这样的 UserManager 方法的目的是什么?

c# - MySQL 'Price' 中的未知列 'field list'

python - Flask-SocketIO eventlet 无法切换到不同的线程