Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.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#_Ajax_Progress Bar_Web Applications - Fatal编程技术网

C# 如何根据服务器端任务的进度更新网页?

C# 如何根据服务器端任务的进度更新网页?,c#,ajax,progress-bar,web-applications,C#,Ajax,Progress Bar,Web Applications,我正在做一个web项目,它从一个调查类型的应用程序中获取结果,并通过一系列计算为用户提供一些建议 现在,这个计算可能需要一分钟左右的时间,所以我希望能够向用户提供一些关于其进度的更新。显然,快速而肮脏的解决方案是用一个旋转齿轮类型的图形显示一条“请稍候,我们正在计算您的建议”的信息。(或者随便什么,你明白了。)。任务完成后,我将重定向到结果页面 不过,我想做一些更华而不实的事情。可能是进度条上的一些东西,甚至提示用户后台正在发生的事情。例如,给他们一个进度条,上面写着“正在处理15项建议中的第3

我正在做一个web项目,它从一个调查类型的应用程序中获取结果,并通过一系列计算为用户提供一些建议

现在,这个计算可能需要一分钟左右的时间,所以我希望能够向用户提供一些关于其进度的更新。显然,快速而肮脏的解决方案是用一个旋转齿轮类型的图形显示一条“请稍候,我们正在计算您的建议”的信息。(或者随便什么,你明白了。)。任务完成后,我将重定向到结果页面

不过,我想做一些更华而不实的事情。可能是进度条上的一些东西,甚至提示用户后台正在发生的事情。例如,给他们一个进度条,上面写着“正在处理15项建议中的第3项;多种维生素”

对我如何设置这个有什么建议吗?我考虑这样做的一种方法是将计算方法的进度写入HttpContext,并启动一个更新面板和计时器来显示/刷新此信息。我还检查了构建web服务/方法的可能性,然后每隔一段时间进行轮询

以前有人做过类似的事情吗?什么对你有用

再次感谢


~Jim

您关于使用HttpContext的建议最终是大多数人如何做这类事情。有很多方法可以美化它,但事实就是如此


其中一种方法是在某种单例(或其他)中注册这些并行线程,并定期(每10秒?)让AJAX调用ping该线程,询问它进展如何,这可能会返回一个完成百分比,供您向用户显示。但是,在幕后,这只是一个AJAX调用。您甚至可以根据询问其他线程的情况时得到的一些响应来改变检查频率。

我过去曾研究过类似的技巧。它们通常在一开始还可以,但在后端必须开始报告更多正在发生的事情这一事实上会出现问题,这样客户端就可以向可能关心或不关心它的用户显示它

ala安装人员说,我们过去所做的一件事是在页面(或进度条等)上简单地放置一个倒计时计时器,并旋转一些文本,上面写着我们将如何处理数据。它不一定特定于正在发生的事情,而是一般性的,我们可以在服务器端定期更新它


如果你想走你最初的路线,我建议你把你的分析任务分成几个过程,并随着过程的进展更新一个集合,然后当客户机回访时(通过ajax、refresh或magic),你只需将状态集合返回给他们,给每个状态一个UID,客户端可以确定它是否需要更新,这样,如果在调用之间发生状态更改,您可以看到许多状态更改,并且您可以最小化使“流程”报告其状态所需的工作。

如果您从未访问过AjaxPatterns.org,那么我建议您进行访问。您要查找的相关阅读材料是:

这涵盖了实现目标的几种模式,以及您已经建议的两种模式。如果您想要实际的进度指示,那么您将不得不做相当多的工作,但基本模式如下:

  • 启动长时间运行的任务(可能在单独的线程上)
  • 创建一个表示已完成工作的共享资源,以及一个可以检索该信息的唯一键。这可以在内存、数据库、文件系统中完成
  • 将该密钥传递回客户端
  • 在客户端,每隔一段时间使用该键轮询进度更新
  • 使用基于值的进度指示器更新客户端显示 返回