Ich verwende eine Instanz von ManualResetEvent
, um den Thread-Zugriff auf eine Ressource zu steuern, aber ich habe Probleme damit. Weiß jemand, wie ich beim Debuggen herausfinden kann, wie der Status des Objekts ist?
Das heißt, ich würde gerne wissen, ob das ManualResetEvent
gerade irgendwelche Threads blockiert und vielleicht sogar wie viele und welche Threads es blockiert.
.net
multithreading
locking
George Mauer
quelle
quelle
ManualResetEventSlim
, was unter anderem eineIsSet
Methode bietet , die angeblich schneller ist alsWaitOne(0)
.Antworten:
Führen Sie ein
WaitOne
Ereignis mit einem Timeout-Wert von Null aus.Es wird true zurückgegeben, wenn das Ereignis festgelegt ist, oder false, wenn das Timeout auftritt. Mit anderen Worten, true -> event ist gesetzt, false -> event ist nicht gesetzt.
quelle
Hier ist Arbeitscode:
private ManualResetEvent pause = new ManualResetEvent(false); pause.WaitOne(); // caller thread pauses pause.Set(); // another thread releases paused thread // Check pause state public bool IsPaused { get { return !pause.WaitOne(0); } }
quelle
IsBlocking
. Ich sehe nicht, wie dies die gegebene Antwort verbessert. Ich denke, wir können uns selbst aufschreiben,WaitOne(0)
wenn wir die Antwort "Führen Sie einWaitOne
Ereignis mit einem Timeout-Wert von Null aus."Sie können Funktionsaufrufe im Debugger Watch-Fenster ausführen. Fügen Sie
mreVariable.WaitOne(0)
im Überwachungsfenster einen Anruf hinzu und sehen Sie, wie er ausgewertet wird. Hinweis: Sie sollten dies nicht für AutoResetEvents verwenden, da dies den tatsächlichen Status ändern könnte.quelle