Blog Schröder

Sammlung von Codeschnipseln zu Programmierproblemen.
Daten aus fremden Quellen unterliegen deren Rechten.
Siehe auch: Disclaimer auf www.computer-schroeder.de

Freitag, 16. November 2007

Ereignis: Seite wurde geschlossen

Ein solches Ereignis gibt es leider nicht (und kann es nicht geben).
Um es annähernd zu simulieren, gehe ich folgendermaßen vor:
1) Das der Seite zugrundeliegende Objekt bekommt eine date-Eigenschaft LastContact
2) Die Seite läßt einen Timer laufen, in dessen Tick-Ereignis LastContact mit dem aktuellen Zeitstempel gefüllt wird. Der Trick: beim Schließen der Seite hört der Timer auf zu laufen und die Eigenschaft bleibt auf dem letztzugewiesenen Zeitstempel stehen.
3) Eine Serveranwendung läßt ebenfalls einen Timer laufen, in dessen Tick die LastContact-Eigenschaft mit der aktuellen Zeit verglichen wird. Wird ein Limit überschritten, dann ist bekannt, daß die Seite nicht mehr existiert.

Code:
1) die Eigenschaft:
Public Class Objekt
Private mLastContact As Date
Public Property LastContact() As Date
Get
Return mLastContact
End Get
Set(ByVal value As Date)
mLastContact = value
End Set
End Property
...
2) der Objekttimer:
ASPX:
<asp:Timer ID="Timer" runat="server" Interval="5000" />
ASPX.VB:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If not Page.IsPostBack Then
Timer.Interval = CycleTime
...
3) der Servertimer:
Private loopTimer As System.Timers.Timer
Private New(...
loopTimer = New System.Timers.Timer
AddHandler loopTimer.Elapsed, AddressOf OnTimedEvent
loopTimer.Interval = SERVERLoopTimerInterval
loopTimer.Enabled = True
' Der Timer läuft so lange diese Klasse besteht (wird praktisch nie beendet)
GC.KeepAlive(loopTimer)
...
End Sub
Private Sub OnTimedEvent(ByVal source As Object, ByVal e As System.Timers.ElapsedEventArgs)
'prüfe, ob Objekt als wartend eingetragen ist, obwohl nicht mehr aktiv
If (Now - obj.LastContact).Minutes * 60000 + _
(Now - obj.LastContact).Seconds * 1000 + _
(Now - obj.LastContact).Milliseconds >= 3 * CycleTime Then obj.istFrei...
End If
...
End Sub

Labels:

Dienstag, 6. November 2007

Email aus Access

Public Sub °°EmailClick(adrFeld As String)
On Error GoTo Er
Application.FollowHyperlink "mailto:" & adrFeld
Ex: Exit Sub
Er: MsgBox "Bitte überprüfen Sie, ob es sich um eine korrekte Email-Adresse handelt."
Resume Ex
End Sub

Labels: , ,