我使用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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top