Ich habe eine Methode, die ich gerne wieder und wieder laufen würde. Ich möchte in der Lage sein, diesen Prozess zu starten und zu stoppen.C# Methode Schleife und Kontrolle
Ich habe dieses Muster für einige Sockel Arbeit verwendet und ich frage mich, welche Verbesserungen ich machen kann?
public delegate void VoidMethod();
public class MethodLooper
{
private VoidMethod methodToLoop;
private volatile bool doMethod;
private readonly object locker = new object();
private readonly Thread loopingThread;
public void Start()
{
if (!doMethod)
{
doMethod = true;
loopingThread.Start();
}
}
public void Stop()
{
if (doMethod)
{
doMethod = false;
loopingThread.Join();
}
}
public void ChangeMethod(VoidMethod voidMethod)
{
if (voidMethod == null)
throw new NullReferenceException("voidMethod can't be a null");
Stop();
lock (locker)
{
methodToLoop = voidMethod;
}
}
public MethodLooper(VoidMethod voidMethod)
{
if (voidMethod == null)
throw new NullReferenceException("voidMethod can't be a null");
methodToLoop = voidMethod;
loopingThread = new Thread(new ThreadStart(_MethodLoop));
}
private void _MethodLoop()
{
VoidMethod methodToLoopCopy;
while (doMethod)
{
lock (methodToLoop)
{
methodToLoopCopy = methodToLoop;
}
methodToLoopCopy();
}
}
}
Entschuldigen Sie! Fehler behoben abelenky - ich bin müde - jetzt stabil mit einigen von Orion vorgeschlagenen Funktionen – divinci