Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.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,我写了一个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}",

我写了一个
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);
    }
}
受保护的无效页面加载(对象发送方,事件参数e)
{
Response.ClearContent();

对于(int i=0;i您是否尝试过

我相信这是与ASP.NET Page生命周期有关的,page yLoad只在页面加载成功时被激发。如果您正在寻找一个在加载页面时输出文本的行为,我建议您考虑Ajax而不是ASP.NET默认事件处理程序。

页面加载:执行所有请求共有的操作,例如设置数据库查询。此时,树中的服务器控件将被创建和初始化,状态将被还原,表单控件反映客户端数据。请参阅处理继承事件,它发生在ViewState和PostData发送到所有服务器端控件b之后正在页面上创建的y ASP.NET控件

预呈现:在呈现输出之前执行任何更新。可以保存在预呈现阶段对控件状态所做的任何更改,而在呈现阶段所做的更改将丢失。这是在将页面状态呈现为HTML之前您有机会处理的最后一个事件


Page Init:是在恢复ViewState和PostData之前触发的事件。

如果您查看网页的工作方式,它基本上首先在各种缓冲区中呈现页面,然后将缓冲区复制到客户端,然后客户端缓冲所有内容,直到可以解析它为止

您实际上可以看到正在发生的事情。您可以执行以下操作,而不是使用浏览器:

telnet localhost 80 (substitute with correct host + port)
GET / HTTP/1.0
[2x enter]
基本上,关键是HTTP并不是你想要的那种流媒体协议。所以…解决方法就是使用AJAX和Javascript


不幸的是,ASP.Net也不应该有后台工作进程。解决方法是使用像Hangfire这样的框架。将其与AJAX回调结合起来,您就有了答案。

我今天很早就阅读了您的问题,但没有回答,因为我担心我可能无法就解决方案向您提供建议ncise代码示例。您将使用
AJAX
和处理程序(
ashx
)遇到相同的障碍,并且这两个都非常相同

您有一些进程在服务器上工作,并且您希望在服务器上发生事情时得到持续的反馈

你最好的选择是pub-sub模型,在asp.net世界中,signer是一个词!看看官方资源

以下是步骤:

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

  • 您可以在服务器端设置signalr handler并订阅长时间运行的处理任务,您的代码在服务器端执行。您需要一个客户端解决方案。一个选项是返回一个简单的页面,在该页面中,它使用ajax调用从服务器端检索数据,显示加载动画,直到调用完成。

    使用通用处理程序ashx没有成功。我认为没有服务器Ajax就无法工作Ajax需要前端Javascript和后端C#逻辑才能工作。它通过Javascript调用C#server logic工作。嗨,我需要监视确定当前状态项的文本行。步骤1完成=>显示文本状态,然后步骤2完成=>显示文本…诸如此类,就像一个控制台应用程序