c# – 在asp.net中向慢速页面添加实时进度更新
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 在asp.net中向慢速页面添加实时进度更新,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2180字,纯文字阅读大概需要4分钟。
内容图文
![c# – 在asp.net中向慢速页面添加实时进度更新](/upload/InfoBanner/zyjiaocheng/783/51555c546f7648ddb09813814e00ab5a.jpg)
我正在尝试将实时进度报告添加到我的c#/ asp.net 4.0应用程序中以获得缓慢加载的页面.我看一下UpdatePanel和UpdateProgress Ajax控件,但我不认为它们是合适的.
基本上,当用户单击按钮时,页面执行许多任务,我希望用户在每个任务完成时看到更新,而不是在完成所有内容并且页面加载完成时查看报告.
订单会发生的事情是:
1.用户点击按钮开始
2.通话方法1
3.当方法1完成时,用户看到“方法1已完成”
3.通话方法2
等等
有人能帮忙吗?
解决方法:
这种异步执行可能难以实现.我头脑中的一些解决方案:
完全没有AJAX的异步:
>使用点击按钮,提交页面.
>服务器为任务生成GUID,并在数据库中创建记录.这可能包括:
> Guid(ID)
>状态标志/枚举
>开始时间.
>服务器生成一个线程来处理任务并传入Guid.
>服务器返回GUID以及“正在工作…”消息
>在n秒/毫秒/ insert-time-span-here之后,浏览器再次发布页面,包括“GetStatus”命令和GUID.
> Server根据GUID检查数据库中的状态标志.
>服务器根据数据库记录返回状态消息(“步骤2 …”,“仍在工作”或任何适当的)
>循环到步骤(5),直到从服务器返回的状态指示该过程完成.
在步骤(3)中创建的线程中:
>线程启动
>从DB记录中读取当前状态
>根据该状态执行下一步
>更新数据库状态以指示它已准备好执行下一步,或设置错误标志.
>睡眠几毫秒以防止阻止应用程序(可能是不必要的 – 我不确定线程??如何在IIS下交互)
>循环到(2)直到完成所有操作.
>线程退出.
Here’s an example of easily creating a thread with a lambda.
(new Thread(
() => {
DoLongRunningWork();
}
) { Name = "Long Running Work Thread"
,
Priority = ThreadPriority.BelowNormal
}).Start();
同步
更容易,但可能会导致一些性能问题:
>用户提交“开始”表单.
>服务器将“正在启动…”写入响应流并刷新流.我认为这应该会将文本发回客户端,但我多年没有尝试过.
>服务器执行第一步.
>服务器将状态写入响应流并刷新.
>循环到步骤(3)直到完成.
实际上,页面保持连接打开,直到任务完成,并且定期刷新输出使客户端不会超时.这可能有超时等问题,您的服务器配置(输出缓冲等)可能是一个问题.
背景任务
与第一种异步方法类似:
>用户点击“开始”
>服务器向DB添加一行,用于标识要执行的任务,检索ID并将其返回给客户端.
>创建一个计划任务(脚本,Windows服务等),轮询表,执行所需任务并在进展时更新状态.
>客户定期使用DB ID重新发布表单.服务器根据数据库检查ID并返回有关状态的消息(可能包含有关以前步骤的信息,如执行时间,ETA等)
>客户端循环到(4)直到任务完成或错误输出.
这与第一种方法的区别在于线程存在于一个单独的进程而不是IIS中.
当然,每种方法都有其问题,可能有一种更简单的方法可以做到这一点.
内容总结
以上是互联网集市为您收集整理的c# – 在asp.net中向慢速页面添加实时进度更新全部内容,希望文章能够帮你解决c# – 在asp.net中向慢速页面添加实时进度更新所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。