在 asp.net 的漫长过程中向用户发送消息的最佳方式是什么。在其他语言中,有一种刷新方法,我看到 asp.net 也有这种方法,但这是最好的方法吗?如果没有,你还能怎么做?
3 回答
最好的方法是生成一个单独的线程来执行长时间运行的进程,然后在主线程上进行 ajax 调用,从长时间运行的线程请求状态并根据需要显示状态。
可以在这里找到一篇相对较好的文章来深入解释这一点:http: //www.devarchive.net/displaying_progress_bar_for_long_running_processes.aspx
使用推送通知框架(comet)http://pokein.codeplex.com/ 或将您的状态保存到数据库,您的页面要么刷新以获取状态,要么使用 jQuery.ajax() 例如获取数据或在计时器上刷新 UpdatePanel,例如:http: //msdn.microsoft.com/en-us/library/cc295400.aspx
无论哪种方式 - 您的“进度”都需要保存到当前会话或数据库并读取。UI 通常不会直接与处理线程交互,但两者都与一些包含更新状态的中间介质对话。
正如 Adam Tuliper 所说——你需要一个推送通知框架,最好的选择是微软的 SignalR。无需在任何地方存储状态,或实施轮询。SignalR 会将您需要的所有内容推送回浏览器,而启动进程的请求(在不同的线程上)通过 HubContext 类将其消息直接发送到客户端。详细信息可以在这里找到。