|
|
Veröffentlicht am 31.05.2018 14:59:47
|
|
|
|

Lassen Sie uns zuerst über ManualResetEvent sprechen, und ich werde während der Diskussion einige AutoResetEvent-Inhalte einfügen, um zu vergleichen:
ManualResetEvent kann einen oder mehrere Threads blockieren, bis ein Signal empfangen wird, das ManualResetEvent auffordert, das aktuelle Thread nicht mehr zu blockieren.
Informationen zu ManualResetEvent
Stellen Sie sich vor, das ManualResetEvent-Objekt besitzt eine Boolean-Typ-Eigenschaft, IsRelease, um zu steuern, ob der aktuelle Thread blockiert wird. Wir können diese Eigenschaft beim Initialisieren festlegen, zum Beispiel ManualResetEvent event=new ManualResetEvent(false); Dies zeigt an, dass die Standardeigenschaft darin besteht, den aktuellen Thread zu blockieren.
Codebeispiel:
Beachten Sie hier einen wichtigen Unterschied zwischen ManualResetEvent und AutoResetEvent:
Das Handbuch wird definitiv sowohl an Gewinde 1 als auch an Faden 2 ein Signal senden.Auto sendet nur zufällig ein Signal an einen von ihnen.
Warum heißt das eine manuell und das andere automatisch? Ich denke, das ist eine Frage, die viele Menschen stellen, und nun werden wir uns dieser Frage anschauen.
Einfach now_manualResetEvent. Set(); Ich denke, jeder versteht diesen Satz, der als Einstellung der Eigenschaft von IsRelease als wahr angesehen werden kann
_manualResetEvent.WaitOne(); Blockiert Thread 1 nicht mehr nach Empfang eines Signals. Der Wert von IsRelease ist während des gesamten danach durchgehenden Prozesses wahr.Wenn
Wenn du den Wert von IsRelease auf false zurücksetzen willst, musst du die Methode _manualResetEvent.Reset() erneut aufrufen.
Wenn es _autoResetEvent.set() ist, setzt _autoResetEvent.WaitOne() automatisch den Wert von IsRelease auf false.
Deshalb heißt das eine Auto und das andere manuell.
Testcode:
|
Vorhergehend:. .NETs schnellste OOM-Objektmapping-Komponente, Tiny Mapper, in der ProjektpraxisNächster:C# Debugging, Debugging, Druck und Ausgabe, detaillierte Erklärung
|