Thomas Bandt

Über mich | Kontakt | Archiv

ASP.NET 1.1 - echten Hintergrundprozess starten

Ich habe einige Zeit gebraucht, bis ich dahinter gekommen bin, wie man unter ASP.NET einen echten Hintergrundthread anstoßen kann. Denn man kann zwar zur Laufzeit eines Webforms weitere Threads erstellen und starten, sobald der Hauptthread aber abgearbeitet ist, werden auch diese gekillt.

Die Lösung: die Timer-Klasse im .NET Framework "Stellt einen Mechanismus zum Ausführen einer Methode in angegebenen Intervallen bereit. Diese Klasse kann nicht geerbt werden."

Mit dieser kann man eine Methode einer Klasse wie geschrieben in einem beliebigen Intervall im Hintergrund, vollkommen unabhängig vom aufrufenden Prozess ausführen. Man kann sie aber auch nur einmal aufrufen:

using System;
using System.Collections;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Threading;

namespace test
{

    public class test : System.Web.UI.Page
    {

        private void Page_Load(object sender, System.EventArgs e)
        {
            
            // Klasse instanzieren
            TestKlasse nl = new TestKlasse();
    
            // Timer setzen. Startet sofort, wird nie wiederholt.
            AutoResetEvent autoEvent = new AutoResetEvent(true);
            TimerCallback timerDelegate = new TimerCallback(nl.Send);
            Timer stateTimer = new Timer(timerDelegate, autoEvent, 0, System.Threading.Timeout.Infinite);

        }

    }
}

Ausschlaggeben ist hier die vom Framework bereitgestellte Konstante "System.Threading.Timeout.Infinite"

"The value of this constant is -1. For threading methods that accept a timeout parameter, such as System.Threading.Thread.Sleep and System.Threading.Thread.Join, this value is used to suppress method behavior that would normally occur due to elapsed time."

Fertig ist der Hintergrundprozess :-) Nutzen kann man das zum Beispiel für größere oder länger dauernde Prozesse, z.B. Auswertungen, Newsletter-Versand usw.



« Zurück  |  Weiter »