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.

C# Komplett

Sie kennen sich in objektorientierter Programmierung aus. Sie schreiben C++ oder Java? Und nun stehen Sie vor der Aufgabe, in C# Anwendungen zu erstellen. Das C# Komplett-Seminar verschafft Ihnen umfassende Programmierkenntnisse in dieser Sprache. Nach der Schulung entwickeln Sie selbständig Anwendungen mit C#. Sie kennen die Datentypen und Klassenbibliotheken der objektorientierten Programmiersprache C#. Der Komplettkurs setzt bei den Grundlagen von C# ein. Sie arbeiten mit Variablen und konvertieren Typen. Multithreading, Delegates, Generics sind nach dem Seminar für Sie kein Geheimnis mehr.

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!