我正在使用ASP.NET和C#並將非常大的結果集導出到Excel。當我的導出代碼正在運行時,我想顯示一個「加載」動畫gif,以便用戶知道他們的請求正在處理中。我一直試圖用多線程來做到這一點,但我對它並不是很熟悉。任何人都可以引導我在正確的方向嗎?謝謝!將結果集導出到Excel時顯示加載消息
Jon
我正在使用ASP.NET和C#並將非常大的結果集導出到Excel。當我的導出代碼正在運行時,我想顯示一個「加載」動畫gif,以便用戶知道他們的請求正在處理中。我一直試圖用多線程來做到這一點,但我對它並不是很熟悉。任何人都可以引導我在正確的方向嗎?謝謝!將結果集導出到Excel時顯示加載消息
Jon
您是否試圖在服務器上執行多線程?我推薦的是在你的客戶端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。我檢查完成服務是否返回標誌的值。
是的,我試圖在服務器上使用多線程。我會盡力解決您的問題,謝謝! – Jon 2009-02-06 16:51:32
我遇到了同樣的問題,生成報告。一個簡單的解決方案是在晚上運行報告,然後將其寫入服務器。然後提供一個鏈接到報告。
如果您有能力使用ASP.NET AJAX,那麼我建議使用UpdateProgress
控件(以及UpdatePanel
)。
如果你想要一個漂亮的動畫gif圖片,請查看Ajaxload。
需要多長時間?超過30秒? – 2009-02-06 16:37:44
大約需要30秒,但意識到這是生成報告的SP存在的問題。現在只需要幾秒鐘。我仍然想知道這一點,以備將來參考(並學習更多)。謝謝你的幫助! – Jon 2009-02-06 16:54:00