Das mit den Threads geht eigentlich sehr einfach, und soll auch besser sein als das Timer-Objekt.
Code:
using System;
using System.Threading;
namespace CWDev
{
/// <summary>
/// Kleiner Timer, realisiert mit einem kleinen Thread.
/// </summary>
public class Timer
{
private int _interval;
private Thread _thread;
#region Delegate & Event
public delegate void TickEventHandler();
public event TickEventHandler OnTick;
protected virtual void Tick()
{
if (OnTick != null)
{
OnTick();
}
}
#endregion
/// <summary>
/// Setzt den Interval des Timers,
/// ist der Timer/der Thread bereits gestartet,
/// lässt sich der Timer nicht setzen.
/// </summary>
public int Interval
{
get { return _interval; }
set
{
if (_thread == null)
_interval = value;
}
}
public Timer(int Interval)
{
_interval = Interval;
}
public Timer()
{
}
/// <summary>
/// Startet den Timer
/// </summary>
public void Start()
{
_thread = new Thread(new ThreadStart(DoTiming));
_thread.Start();
}
/// <summary>
/// Startet den Timer.
/// </summary>
/// <param name="Interval">Setzt vor dem Starten das Interval neu</param>
public void Start(int Interval)
{
_interval = Interval;
Start();
}
/// <summary>
/// Stopt den Timer.
/// </summary>
public void Stop()
{
_thread.Interrupt();
_thread.Abort();
}
/// <summary>
/// Schaltet den Timer auf Pause
/// </summary>
public void Pause()
{
_thread.Suspend();
}
/// <summary>
/// Holt den Timer aus der Pause
/// </summary>
public void Resume()
{
_thread.Resume();
}
private void DoTiming()
{
Thread.Sleep(this._interval);
Tick();
}
}
}
Habe gleich eine eigenen kleinen Timer geschrieben, der unter Mono funktionieren sollte. Kompilieren lässt sich die Klasse mit mcs. Getestet habe ich nicht, sollte aber gehen.
Bei der angehängten Datei bitte das ".zip" entfernen, tar.gz Archive sind ja hier nicht erlaubt.
Ich hoffe du kannst damit was anfangen,
mfg,
Alex
// Edit
Zur Verwendung noch:
Eine neue Instanz der Timer-Klasse erstellen, das Interval setzen, einen EventHandler hinzufügen, und die Start Methode aufrufen.
Code:
...
Timer myTimer = new Timer();
myTimer.Interval = 1000;
myTimer.OnTick += new TickEventHandler(TuWas);
myTimer.Start();
...