创建excel文件asp.net时的进度条

创建excel文件asp.net时的进度条,asp.net,progress-bar,Asp.net,Progress Bar,我有一个ASP.net页面,可以使用eeplus库()创建excel文件。我的问题是我创建了一个很大的文件。这需要时间来完成并向客户展示。我寻找一种方式来展示一种创作进度条 目前,客户端单击并等待文件创建,因此我无法真正显示一些内容。一个快速解决方案是使用Ajax.NETUpdateProgress控件。只需在服务器处理时显示旋转的GIF即可 你要做的事情其实相当复杂。你可能只想展示一个旋转的gif或其他东西,省得自己头疼 然而,如果你觉得有冒险精神,请继续阅读 要使用进度条,您需要创建一种方法

我有一个ASP.net页面,可以使用eeplus库()创建excel文件。我的问题是我创建了一个很大的文件。这需要时间来完成并向客户展示。我寻找一种方式来展示一种创作进度条


目前,客户端单击并等待文件创建,因此我无法真正显示一些内容。

一个快速解决方案是使用Ajax.NET
UpdateProgress
控件。只需在服务器处理时显示旋转的GIF即可

你要做的事情其实相当复杂。你可能只想展示一个旋转的gif或其他东西,省得自己头疼

然而,如果你觉得有冒险精神,请继续阅读

要使用进度条,您需要创建一种方法来衡量完成任务的百分比。这通常涉及到某种增量,它根据您创建的行/列/任何内容的总数进行度量。我不知道您使用的是什么语言,所以这里有一些伪代码可以帮助您:

var totalRows     = 100;
var processedRows = 0;
var progress      = 0;

while( processedRows < totalRows ){

   Process_A_Row();

   processRows++;
   progress = processedRows / totalRows;

   StoreProgressSomewhereForPolling();
}
var totalRows=100;
var processedRows=0;
var进程=0;
while(processedRows

这就是跟踪进度的基本机制。在客户机上,需要设置轮询进度变量值的方法。这会变得混乱,因为您很快就会了解到,您需要一种方法来隔离每个请求的进度变量。如何实现这一点取决于您——有很多方法可以实现。我看到的一个解决方案是将进度值存储在一个由用户名键入的静态字典中,这样客户端就可以使用webmethods轻松地对其进行轮询。

另一个代替轮询的选项是直接将进度推送到客户端,因为.net已经查看了SignalR库。@jods:据我所知,SignalR并不是真正的“推送”尽管它被调查了……至少在不涉及WebSocket的地方。你是对的,但是--它使像这样的双向通信场景变得更加容易:)是的,它抽象了双向通信的机制。但如果web套接字不可用,它实际上有多层回退:服务器发送的事件、永久帧。。。当然,最后是投票。我看看信号员。以前,我更想创建一个中间页面。她一步一步地创建文件,显示进度并将数据保存到会话变量中(对于viewstate来说太大)。完成后,调用将使用会话的excel.aspx。我还考虑了ajax,查看一个检查创建进度的页面。