Forum: ASP.NET |
Thema:
Re: ASP.net als Windows-Dienst "missbrauchen"? |
Von:
Klaus Holster (
12.01.2005 14:11) |
Hallo Thomas,
wenn im Thread eine Exception auftritt, dann wird die Methode beendet, falls die Exception nicht behandelt wird. Dazu muss in den Eventhandlern jeweils ein Try..Catch eingebaut werden, etwa so:
Public Class CustomMailHandler
Public Sub myWatcherEMailOnCreated(ByVal sender As Object, ByVal e As FileSystemEventArgs)
Try
' File created hier behandeln
Catch ex As Exception
' Fehler hier behandeln
End Try
End Sub
Public Sub myWatcherEMailOnRenamed(ByVal sender As Object, ByVal e As RenamedEventArgs)
Try
' File renamed hier behandeln
Catch ex As Exception
' Fehler hier behandeln
End Try
End Sub
End Class
Die Thread-Methodes kann dann etwa so aussehen:
Public Shared Sub EMailUeberwachenVersand()
Dim myWatcher As New FileSystemWatcher
Dim myMailHandler As New CustomMailHandler
AddHandler myWatcher.Created, AddressOf myMailHandler.myWatcherEMailOnCreated
AddHandler myWatcher.Renamed, AddressOf myMailHandler.myWatcherEMailOnRenamed
' Begin watching.
myWatcher.EnableRaisingEvents = True
Do
System.Threading.Thread.CurrentThread.Sleep(1000)
Loop
End Sub
Bloss, der Thread ist überflüssig, weil die Aktion ja vom FileSystemWatcher ausgelöst wird und der sowieso im Hintergrund aktiv ist. Er braucht keinen eigenen Thread, sondern nur Handlermethoden, die man auch direkt in der Global.asax unterbringen kann.
Übrigens hat der von mir gepostete Beispielcode noch eine kleine Macke: fsw und Handler sollte als shared dekariert werden. Die richtige Version sieht so aus:
Private Shared fsw As New FileSystemWatcher
Private Shared Sub OnChanged(ByVal source As Object, ByVal e As FileSystemEventArgs)
Dim SMTPMessage As System.Web.Mail.MailMessage = New System.Web.Mail.MailMessage
SMTPMessage.From = "nn@hier.die"
SMTPMessage.To = "nn@da.de"
SMTPMessage.Subject = "fsw change"
SMTPMessage.Body = e.FullPath + " / " + e.ChangeType.ToString
SMTPMessage.BodyEncoding = System.Text.Encoding.UTF8
System.Web.Mail.SmtpMail.SmtpServer = "127.0.0.1"
System.Web.Mail.SmtpMail.Send(SMTPMessage)
End Sub
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
fsw.Path = "c:\fsw\"
fsw.EnableRaisingEvents = True
AddHandler fsw.Changed, AddressOf OnChanged
End Sub
Try/Catch im Handler habe ich weggelassen, so dass Fehler im Standard-Fehlerhandler Application_Error behandelt werden (können).
Hth,
Klaus
Betreff |
Von |
Datum |
|
|
G.
Guest
|
12.01.2005 14:21 |
|
|
Thomas
Grupp
|
12.01.2005 14:21 |
|
|
Antworten
Vorsicht bei der Eingabe: Die Zeichen ' oder -- sind nicht erlaubt!