而导出的结果显示加载信息设置到Excel
-
22-08-2019 - |
题
我使用ASP.NET和C#和我设置导出到Excel一个非常大的效果。虽然我出口的代码运行,我想显示“加载”动画GIF,因此用户会知道他们的请求被处理。我一直在试图与多线程来做到这一点,但我不是很熟悉。任何人都可以指导我在正确的方向?谢谢!
乔恩
解决方案
您想要做的服务器上的多线程?我建议你在你的客户端发送到服务器之前的JavaScript打开一个请稍候消息。然后在客户端,当你做了发布您关闭消息关闭。
不知道更多关于你的实际设置我不禁更远,但我最后一次实现了这个我做这些方针的东西:
假设我们有一个使用JQUERY我设置div来显示和接管窗口称为PrintLoadingPanel DIV:
$("#printLoadingPanel")
.css({display:"block",top:"0px",left:"0px",height:screen.availHeight});
我然后将开始与1/2秒的时间间隔,这将开始检查,如果我们完成印刷的定时器。我只生成和下载PDF小的,所以我需要一个更快的响应。如果您的报告实在是太慢了,你可能要调整这样的:
window.setTimeout(checkIfDoneDownload,500);
然后我CheckIfDoneDownload功能命中服务器和检查我们完成生成文件,并下载了它。我在这里使用JQuery再次调用一个AJAX启用WCF服务。你可以用PageMethods或任何其他方式回调到服务器替换这一点。
function checkIfDoneDownload()
{
$.ajax({
type: "POST",
url: "../Services/Utilities.svc/IsPrintDownloadDone",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
if (msg.d)
{
$("#printLoadingPanel").css("display","none");
}
else {window.setTimeout(checkIfDoneDownload,500);}
},
error: function (xhr, textStatus, errorThrown) {
if (xhr.status==12030) {checkIfDoneDownload();}
}
});
}
现在,在服务器端,我通过HTTP处理程序生成我的下载。本质上,它做的第一件事是设置会话级标志为false,那么它的最后一件事是将其设置回真实的。我检查,如果做服务仅返回标志的值。
其他提示
我已经与生成报告碰到这个相同的问题。一个简单的解决办法是运行在夜间的报告,然后将其写入服务器。然后提供一个链接到该报告。
如果你在使用ASP.NET AJAX那么我建议你使用的 UpdateProgress
控制(具有UpdatePanel
一起)。
如果你是一个很好的gif动画图像后,然后检查了 Ajaxload 。