DelayedCall-Klasse

Ich bin k?rzlich ?ber einen interessanten Artikel auf beta.unclassified.de gestoßen. Über einen sogenannten DelayedCall kann eine Methode jeglicher Art verzögert aufgerufen werden. Dies ist in vielen Bereichen, die mir bisher untergekommen sind, sehr n?tzlich, da somit zB. GUI-Animationen und Effekte erreicht werden können. Es ist auch ebenso möglich unschöne Nebeneffekte (Aufbau eines Controls + f?llen mit vielen dynamischen Daten) zu umgehen, indem erst das Control erzeugt und zeitlich verzögert das Laden und Binden der Daten gestartet wird.

Folgender Code beinhaltet die Klasse f?r DelayedCall (beachtet bitte nicht die Probleme bei der Formatierung – der WordPress Editor scheint arg alles umwerfen zu wollen).
(Namespace wurde an eigene Begebenheiten angepasst)

[source:csharp] using System;
using System.Windows.Forms;

// Beispielaufruf:
// new DelayedCall(new DelayedCall.Function(EineFunktion), 500);
// In .NET 2.0 funktioniert auch das:
// new DelayedCall(EineFunktion, 500);
// Funktion mit einem Parameter (muss vom Typ object sein):
// new DelayedCall(FunktionMitParameter, 500, argument1);

namespace KeenTech
{
public class DelayedCall
{
public delegate void Function();
public delegate void Function1(object data1);
public event Function myEvent = null;
public event Function1 myEvent1 = null;
private Timer timer;
private object _data1;
private ushort paramCount = 0;

public DelayedCall(Function function)
{
myEvent = function;
paramCount = 0;
timer = new Timer();
timer.Tick += new EventHandler(this.Event);
}

public DelayedCall(Function function, int delay)
{
myEvent = function;
paramCount = 0;

timer = new Timer();
timer.Tick += new EventHandler(this.Event);
if (delay > 0)
{
timer.Interval = delay;
timer.Start();
}
}

public DelayedCall(Function1 function, object data)
{
myEvent1 = function;
paramCount = 1;
_data1 = data;

timer = new Timer();
timer.Tick += new EventHandler(this.Event1);
}

public DelayedCall(Function1 function, int delay, object data)
{
myEvent1 = function;
paramCount = 1;
_data1 = data;

timer = new Timer();
timer.Tick += new EventHandler(this.Event1);
if (delay > 0)
{
timer.Interval = delay;
timer.Start();
}
}

public bool IsWaiting
{
get
{
return timer.Enabled;
}
}

public void Cancel()
{
timer.Stop();
}

public void Fire()
{
if (paramCount == 0)
Event(null, null);
else if (paramCount == 1)
Event1(null, null);
}

public void Reset()
{
timer.Stop();
timer.Start();
}

public void Reset(int delay)
{
timer.Stop();
if (delay > 0)
{
timer.Interval = delay;
timer.Start();
}
}

public void SetTimeout(int delay)
{
timer.Interval = delay;
}

private void Event(object o, System.EventArgs e)
{
timer.Stop();
try
{
myEvent();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), „DelayedCall Exception“, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}

private void Event1(object o, System.EventArgs e)
{
timer.Stop();
try
{
myEvent1(_data1);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), „DelayedCall Exception“, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}

[/source]

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.