Frage

Ich bin mit ASP.NET und C # und bin Export ein sehr großen Ergebnisse auf Excel. Während mein Export Code ausgeführt würde Ich mag einen „Laden“ animated gif zeigen, so dass die Benutzer ihre Anfrage wissen verarbeitet. Ich habe versucht, dies mit Multithreading zu tun, aber ich bin nicht sehr vertraut mit ihm. Kann jemand mich in die richtige Richtung? Dank!

Jon

War es hilfreich?

Lösung

Versuchen Sie, Multi-Threading auf dem Server zu tun? Was würde ich empfehlen, ist in der Client-Seite JavaScript auf einem wenden Sie sich bitte Nachricht warten, bevor sie an den Server zu veröffentlichen. Dann auf der Client-Seite, wenn Sie fertig sind Sie die Nachricht Entsendung auszuschalten.

Ohne mehr über Ihre Konfiguration zu wissen, kann ich nicht viel weiter helfen, aber ich das letzte Mal implementiert dies tat ich etwas in dieser Richtung:

Angenommen, wir haben einen div namens PrintLoadingPanel JQUERY mit stellte ich die div über das Fenster anzuzeigen und zu nehmen:

    $("#printLoadingPanel")
       .css({display:"block",top:"0px",left:"0px",height:screen.availHeight});

Ich werde dann einen Timer mit einem 1/2 Sekunden-Intervall beginnen, der Überprüfung wird gestartet, wenn wir Druck gemacht werden. Ich bin nur zu erzeugen und das Herunterladen von kleinen PDF-Dateien, so dass ich eine schnellere Reaktion erforderlich. Wenn Ihr Bericht ist wirklich langsam Sie können diese zwicken:

    window.setTimeout(checkIfDoneDownload,500);

Dann trifft meine CheckIfDoneDownload Funktion den Server und prüft, ob wir die Datei fertig zu erzeugen und es heruntergeladen. Ich verwende JQUERY hier wieder ein AJAX-fähigen WCF-Dienst aufrufen. Sie könnten diese ersetzen mit Pagemethods oder jede andere Art und Weise an den Server zurückrufen.

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();}
}
});
}

Jetzt auf der Server-Seite, Ich erzeuge meine Downloads über einen HTTP-Handler. Im Wesentlichen das erste, was er tut, ist eine Session-Ebene auf false gesetzt ist, dann das letzte, was es tut, ist es wieder auf true gesetzt. Mein überprüfen, ob getan Service nur den Wert der Flagge zurück.

Andere Tipps

Ich habe mit Erstellung von Berichten in das gleiche Problem laufen. Eine einfache Lösung wäre, den Bericht in der Nacht laufen zu lassen und es dann an den Server schreiben. Dann einen Link zu dem Bericht.

Wenn Sie in der Lage sind ASP.NET AJAX zu verwenden, dann würde ich empfehlen, die UpdateProgress Steuerung (zusammen mit einem UpdatePanel).

Wenn Sie nach einem schönen animierten GIF-Bild sind dann schauen Sie Ajaxload .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top