2009-02-06 97 views
0

我正在使用ASP.NET和C#並將非常大的結果集導出到Excel。當我的導出代碼正在運行時,我想顯示一個「加載」動畫gif,以便用戶知道他們的請求正在處理中。我一直試圖用多線程來做到這一點,但我對它並不是很熟悉。任何人都可以引導我在正確的方向嗎?謝謝!將結果集導出到Excel時顯示加載消息

Jon

+0

需要多長時間?超過30秒? – 2009-02-06 16:37:44

+0

大約需要30秒,但意識到這是生成報告的SP存在的問題。現在只需要幾秒鐘。我仍然想知道這一點,以備將來參考(並學習更多)。謝謝你的幫助! – Jon 2009-02-06 16:54:00

回答

1

您是否試圖在服務器上執行多線程?我推薦的是在你的客戶端JavaScript打開一個請等待消息,然後張貼到服務器。然後在客戶端,當您完成發佈時,您可以關閉消息。

不知道更多關於你的實際設置我不禁更遠,但我最後一次實現了這個我做這些方針的東西:

假設我們使用jQuery PrintLoadingPanel我的DIV設置爲所謂的一個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,然後它所做的最後一件事就是將其設置爲true。我檢查完成服務是否返回標誌的值。

+0

是的,我試圖在服務器上使用多線程。我會盡力解決您的問題,謝謝! – Jon 2009-02-06 16:51:32

0

我遇到了同樣的問題,生成報告。一個簡單的解決方案是在晚上運行報告,然後將其寫入服務器。然後提供一個鏈接到報告。

0

如果您有能力使用ASP.NET AJAX,那麼我建議使用UpdateProgress控件(以及UpdatePanel)。

如果你想要一個漂亮的動畫gif圖片,請查看Ajaxload