Frage

Ich habe einen Prozess in einer Website (Asp.net 3.5 mit Linq-to-SQL-Code für den Datenzugriff), die arbeiten muss wie folgt:

  1. Upload-Datei
  2. Datensatz und speichern Informationen über Datei zur Datenbank
  3. Importieren von Daten aus der Datei in der Datenbank
  4. Umleiten auf andere Seite

Wenn der Reihe nach wie folgt ausführen, funktioniert alles einwandfrei. Da jedoch die Dateien importiert werden können ziemlich groß sein, würde Ich mag Schritt 3 auf einem anderen Thread aus dem UI-Thread ausgeführt werden. Der Benutzer soll 4 erhalten Schritt während Schritt 3 noch im Gang ist, und der Bildschirm Schritt 4 wird in regelmäßigen Abständen die Benutzer aktualisieren zu informieren, wenn der Import abgeschlossen ist.

Ich bin Umgang mit dem Einfädeln wie folgt:

public class Import {

  public static void ImportPendingFile() {
    Import i = new Import();
    Thread newThread = new Thread(new ThreadStart(i.ImportFile));
    newThread.Start();
  }

  public void ImportFile() {
    // 1. Query DB to identify pending file
    // 2. Open up and parse pending file
    // 3. Import all data from file into DB
    // 4. Update db to reflect that import completed successfully
  }
}

Und in dem Code-Behind:

protected void butUpload(object sender, EventArgs e) {
  // Save file, prepare for import
  Import.ImportPendingFile();
  Response.Redirect(NewLocation);
}

Wenn dies zu tun, ich bin in der Lage über Debugger, um zu bestätigen, dass der neue Thread richtig startet. Jedes Mal, wenn ich das tue, bricht der Faden, wenn die Datei (Schritt 2 in der Code-behind) zuzugreifen versuchen. Dies funktioniert gut, wenn im Hauptthread ausgeführt, so etwas über die Multi-Threaded-Situation verhindert dies. Ich hatte gedacht, dass, da die Datei auf der Festplatte gespeichert ist (was es ist), dass es kein Problem mit Öffnung in einem anderen Thread nach oben sein sollte. Irgendwelche Ideen, wo ich schief gelaufen ist und wie kann ich es beheben? Vielen Dank!

Hinweis: Ich bin mit einer Drittanbieter-Baugruppe die Datei zu öffnen. Mit Reflektor, ich habe den folgenden Code gefunden damit zusammen, wie es die Datei öffnet sich:

if (File.Exists(fileName)) {
  using (FileStream stream = new FileStream(fileName, FileMode.Open)) {
    // use stream to open file
  }
}
War es hilfreich?

Lösung

Versuchen Sie Response.Redirect (url, false), sonst die 'Antwort' beendet werden, wird nur nach dem Aufruf.

Andere Tipps

ASP.NET-Ansichtszustand ist ein großartiges Feature und ein unverzichtbares Werkzeug für Web-Entwicklung von heute. Er behält den Zustand einer Seite, wie sie hin und her bewegt. Es gibt keine Notwendigkeit mehr, über die Wiederherstellung Wert von Seite Kontrollen zwischen Postbacks zu kümmern. In diesem Artikel finden Sie eine eingehende Perspektive auf Ansichtszustand erhalten. Wir werden über Möglichkeiten zur Reduzierung unnötiger Nutzlast und zum Schutz der Ansichtszustand vor neugierigen Blicken sprechen.

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