我在ASP.NET / C#中有一个简单的网页。目前,为了完全呈现数据,我需要调用在后台线程上运行的代码块,并且可能需要几分钟才能完成。我已经明确了(使用页面声明中的async属性)执行并在完成后使用html返回正常。我想要它做的是允许我立即返回某种“加载页面”,然后在后台工作完成后更新该页面。现在,在处理后台工作时,我在页面上什么也得不到。任何关于最佳方式或聪明方式的想法都将非常感激!
谢谢,
西格
答案 0 :(得分:1)
我同意上面发布的评论。
然而,我会使用ashx(处理程序)将“处理器”实现为单独的页面,因为这些非常简单,可以从javascript中调用和轮询,并且您只需将处理请求事件编码到响应流中。
我很乐意在我的网站上向您展示一个示例,但我的主持人决定在他们的服务器上更新.net时让我的网站运行一周(您可以想象我对此并不特别满意)。< / p>
基本上虽然在我的情况下我有一个依赖于以下数据的页面: 英国广播公司 谷歌 亚马逊 YouTube的 其他一些随机网站。
页面返回给用户,然后页面上的各个控件将ajax调用回服务器以获取其部件。
将反馈数据加载到的标签的默认内容是一个简单的动画gif图像,看起来很像flash或silverlight加载圈。
数据恢复后,gif将替换为服务器馈送的内容。
这意味着客户端看到“正在加载”,服务器正在忙着处理客户需要的所有内容(从它的角度看似乎是同步的)。
这是一种干净的用户体验,代码非常简单。
在查看如何使用silverlight进行文件上传时,我想到了这个想法。
基本概念:
希望这会有所帮助:)
答案 1 :(得分:0)
有许多方法可以使用Ajax来实现您所描述的内容,但如果您想要保持简单,只需Flush()
在之前使用某个加载屏幕进行回复<div>
Loading..
<% Response.Flush(); %>
<% System.Threading.Thread.Sleep(5000); %>
Done!
</div>
开始长期运行的任务:
{{1}}
答案 2 :(得分:0)
您想要的是HTTP Server Push或 HTTP Streaming 或长轮询。取决于它是如何完成的。
网上有很多例子,还有深入解释问题的文章。我首先要研究那些。
您还可以在HTTP Streaming上查看此SO问题...
Cross-browser implementation of "HTTP Streaming" (push) AJAX pattern
有一个很棒的介绍文章的链接。
或者这个以长轮询
为例How do I implement basic "Long Polling"?
或
https://stackoverflow.com/questions/tagged/long-polling
希望这有帮助。