2013-07-16 23 views
0

我有一个使用eeplus库(http://epplus.codeplex.com/)创建excel文件的ASP.net页面。我的问题是我创建了一个非常大的文件。需要花费时间完成并向客户展示。我寻找一种方式来展示创作的一种进度条。创建excel文件时的进度条asp.net

目前,客户端点击并等待文件创建完成,所以我无法真正展现出一些东西。

回答

0

你想要做的事实际上很复杂。你可能只想显示一个旋转轮gif或什么东西,并保存头痛。

但是,如果您感觉冒险,请继续阅读。

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

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

while(processedRows < totalRows){ 

    Process_A_Row(); 

    processRows++; 
    progress = processedRows/totalRows; 

    StoreProgressSomewhereForPolling(); 
} 

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

+0

另一种选择,而不是轮询可以将进度直接推送到客户端,for .net有看看SignalR库。 – jods

+0

@jods:根据我的理解,SignalR并没有真正“推”这么多,因为它被轮询......至少在没有涉及websocket的地方。你是对的 - 虽然它使双向通信场景像这样一个多,更容易:) –

+0

是的,它提取了双向通信的机制。但是,如果Web套接字不可用,它实际上有几层后备:服务器发送的事件,永远帧......当然最终还是轮询。 – jods

0

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