Willkommen bei dotnet-snippets.de! Snippet hinzufügen Login Registrieren
Snippets in der Datenbank: 1563 | Anzahl registrierter User: 1895 | Besucher online: 55
Hauptmenü
Home
Top Ten
Zufälliger Snippet
FAQs
.NET Community
dotnet-forum.de
dotnet-kicks.de
Social

RSS Feeds
Rss Alle Snippets
Rss C#
Rss VB.NET
Rss C++
Rss ASP.NET
Partner
Member of Microsoft Community Leader/Insider Program (CLIP)

Verhindern das Funktion rekursiv aufgerufen wird.


Autor: Pendergast
Sprache: C#
Bewertung: 2,6
(1 Bewertung)
Anzahl der Aufrufe: 3290
  
Kick it on dotnet-kicks.de  

Beschreibung:

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.

Abgelegt unter: StackOverflow, StackTrace, CallStack, rekursiv.



C#
1
2
3
4
5
6
var callStack = new StackTrace();
var currentMethod = MethodBase.GetCurrentMethod();
for (var i = 1; i < callStack.FrameCount; i++)
{
    if (callStack.GetFrame(i).GetMethod()== currentMethod) return;
}
Sie haben Fragen zu diesem Snippet oder brauchen Hilfe bei der .NET Entwicklung?
Freundliche und kompetente Entwickler helfen Ihnen gern weiter im Forum für .NET Entwicklung.



Kommentare:
(Zum Schreiben von Kommentaren bitte anmelden.)

hackman schrieb am:  08.04.2011 18:23:37

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 10:28:00

@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.


schlecht sehr gut
1 2 3 4 5 6 7 8 9 10
Nur angemeldete User können Snippets bewerten.