You're here: Snippet Directory » Microsoft .NET » ASP.NET (64)
Language:

ASP.NET 1.1 - echten Hintergrundprozess starten

Language: Deutsch
Programming Language: C#
Published by: Thomas
Last Update: 4/24/2006
Views: 1168

Description

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.

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.

Code

1 using System; 2 using System.Collections; 3 using System.ComponentModel; 4 using System.Configuration; 5 using System.Data; 6 using System.Drawing; 7 using System.Web; 8 using System.Web.SessionState; 9 using System.Threading; 10 11 namespace test 12 { 13 14 public class test : System.Web.UI.Page 15 { 16 17 private void Page_Load(object sender, System.EventArgs e) 18 { 19 20 // Klasse instanzieren 21 TestKlasse nl = new TestKlasse(); 22 23 // Timer setzen. Startet sofort, wird nie wiederholt. 24 AutoResetEvent autoEvent = new AutoResetEvent(true); 25 TimerCallback timerDelegate = new TimerCallback(nl.Send); 26 Timer stateTimer = new Timer(timerDelegate, autoEvent, 0, System.Threading.Timeout.Infinite); 27 28 } 29 30 } 31 }

No comments avaiable

Add a comment

Name *  

Email (won't be displayed) *    

Website  

Comment *  

Sicherheitscode Security Code *    

RSS