c# - 在页面执行长时间运行的任务时写入多行文本

标签 c# asp.net

我写了一个 asp.net 页面,它打印了一些文本如下:

protected void Page_Load(object sender, EventArgs e)
{
    Response.ClearContent();
    for (int i = 0; i <=100; i++)
    {   
        var isOk = DoSomeTask(i);
        context.Response.Write(string.Format("Step {0}: {1}",i, isOk ? "Success": "Error"));
        Thread.Sleep(4000);
    }
}

我遇到了一个问题,文本仅在页面加载成功时显示。如何在页面执行时呈现文本?

最佳答案

好吧,我今天很早就读了你的问题,但没有回答,因为我担心我可能无法用简洁的代码示例为你提供解决方案建议。使用 AJAX 和处理程序 (ashx) 时,您将遇到相同的障碍,而这两者非常相似。

您有一些进程在服务器上工作,您希望随着服务器上发生的事情不断得到反馈。

最好的选择是发布-订阅模型,在 asp.net 世界中 SignalR 就是这个词!看看官方资源here .

步骤如下:

  1. 每当您在长时间运行的任务中执行部分工作时生成事件
  2. 设置响应步骤 1 中生成的事件的信号处理程序(集线器)。
  3. 在aspx页面(客户端)连接signalr hub
  4. 在客户端代码(在第 3 步中设置)处理事件(第 2 步)时接收响应并更新您的页面。

您可以在服务器端设置信号处理程序并订阅长时间运行的处理任务

关于c# - 在页面执行长时间运行的任务时写入多行文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38216252/

相关文章:

c# - 无法访问 jar 文件

c# - DependencyProperty typeof GridLength 未将值 "Auto"传递给 CustomControl 中的 ChildElement

c# - 缓存具有类似性能的内存数据集并将其与数据库更改相关联的最佳方法是什么?

asp.net - 图像大小不适用于 mozilla 和 IE

c# - 为什么使用 ASP.NET 验证器进行验证?

c# - 使用 IOC Container 做 repository 层单例

C# P\Invoke DLL 没有进入 C++ 的入口点?

c# - 异步且安全地读取文件中的所有行

c# - 仅在循环的第一次迭代中添加值

c# - ASP.NET 浏览器定义文件不工作