Feedback

C# - Verhindern das Funktion rekursiv aufgerufen wird.

Veröffentlicht von am 17.03.2011
(1 Bewertungen)
Manchmal kann es z.B. passieren das Events sich gegenseitig auslösen und einen Stack Overflow auslösen. Durch Einfügen dieses Codes kann man prüfen ob der aktuelle Funktionsaufruf von der selben Funktion ausgelöst wurde.
GFU-Schulungen  [Anzeige]

VB.NET 2017/2015/2013 Einführung

Das Seminar befähigt Sie zur eigenständigen Entwicklung von anwenderorientierten Programmen in VB.NET, worin auch der Einsatz von Datenbanken enthalten ist.

VB.NET 2017/2015/2013 Komplett

Ziel des Seminars ist der flexible Umgang mit VB.NET, wie z.B. die damit verbundene eigenständige Entwicklung von Programmen oder das Verwenden von Datenbanken.

var callStack = new StackTrace();
var currentMethod = MethodBase.GetCurrentMethod();
for (var i = 1; i < callStack.FrameCount; i++)
{
    if (callStack.GetFrame(i).GetMethod()== currentMethod) return;
}

2 Kommentare zum Snippet

hackman schrieb am 08.04.2011:
schon etwas aufwendig mit dem reflection stack zu vergleichen ... vor allem würde ich sagen soll reflection eher für "diagnose" zwecke oder selbstformende programme verwendet werden, nicht wirklich um sicheren code zu schreiben ...

schöner wäre hier:

bool _Functionrunning = false;

void DoSomething()
{
if(_Functionrunning)
return;

_Functionrunning = true;

try
{

}
finally
{
_Functionrunning = false;
}
}



Pendergast schrieb am 12.04.2011:
@hackman
Diese Lösung ist natürlich besser wenn du den gesamten Code selber geschrieben hast. Wenn aber DoSomething eine Funktion ist, die sich in einem externen Framework befindet und nicht überschreibbar ist wird die Sache schon komplizierter.
 

Logge dich ein, um hier zu kommentieren!