Feedback

C# - Verhindern das Funktion rekursiv aufgerufen wird.

Veröffentlicht von am 3/17/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.
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 4/8/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 4/12/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!