ManualResetEvent Osztály
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Olyan szálszinkronizálási eseményt jelöl, amelyet a jelzéskor manuálisan kell alaphelyzetbe állítani. Ez az osztály nem örökölhető.
public ref class ManualResetEvent sealed : System::Threading::EventWaitHandle
public ref class ManualResetEvent sealed : System::Threading::WaitHandle
public sealed class ManualResetEvent : System.Threading.EventWaitHandle
public sealed class ManualResetEvent : System.Threading.WaitHandle
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class ManualResetEvent : System.Threading.EventWaitHandle
type ManualResetEvent = class
inherit EventWaitHandle
type ManualResetEvent = class
inherit WaitHandle
[<System.Runtime.InteropServices.ComVisible(true)>]
type ManualResetEvent = class
inherit EventWaitHandle
Public NotInheritable Class ManualResetEvent
Inherits EventWaitHandle
Public NotInheritable Class ManualResetEvent
Inherits WaitHandle
- Öröklődés
- Öröklődés
- Öröklődés
- Attribútumok
Példák
Az alábbi példa bemutatja, hogyan ManualResetEvent működik. A példa egy ManualResetEvent aláíratlan állapottal kezdődik (azaz false a konstruktornak továbbítja). A példa három szálat hoz létre, amelyek mindegyike a metódus meghívásával ManualResetEvent blokkolja a WaitOne folyamatot. Amikor a felhasználó lenyomja az Enter billentyűt, a példa meghívja a Set metódust, amely mindhárom szálat felszabadítja. Ezzel szemben az osztály viselkedése AutoResetEvent , amely egyenként bocsátja ki a szálakat, minden kiadás után automatikusan alaphelyzetbe áll.
Az Enter billentyű ismételt lenyomásával látható, hogy a rendszer a ManualResetEvent metódus meghívásáig Reset a jelzett állapotban marad: A példa két további szálat indít el. Ezek a szálak nem blokkolják, amikor meghívják a metódust WaitOne , hanem a befejezésig futnak.
Az Enter billentyű ismételt lenyomásával a példa meghívja a Reset metódust, és elindít egy újabb szálat, amely blokkolja a hívásokat WaitOne. Nyomja le az Enter billentyűt egy utolsó alkalommal, amikor meghívja Set az utolsó szál kiadását, és a program véget ér.
using System;
using System.Threading;
public class Example
{
// mre is used to block and release threads manually. It is
// created in the unsignaled state.
private static ManualResetEvent mre = new ManualResetEvent(false);
static void Main()
{
Console.WriteLine("\nStart 3 named threads that block on a ManualResetEvent:\n");
for(int i = 0; i <= 2; i++)
{
Thread t = new Thread(ThreadProc);
t.Name = "Thread_" + i;
t.Start();
}
Thread.Sleep(500);
Console.WriteLine("\nWhen all three threads have started, press Enter to call Set()" +
"\nto release all the threads.\n");
Console.ReadLine();
mre.Set();
Thread.Sleep(500);
Console.WriteLine("\nWhen a ManualResetEvent is signaled, threads that call WaitOne()" +
"\ndo not block. Press Enter to show this.\n");
Console.ReadLine();
for(int i = 3; i <= 4; i++)
{
Thread t = new Thread(ThreadProc);
t.Name = "Thread_" + i;
t.Start();
}
Thread.Sleep(500);
Console.WriteLine("\nPress Enter to call Reset(), so that threads once again block" +
"\nwhen they call WaitOne().\n");
Console.ReadLine();
mre.Reset();
// Start a thread that waits on the ManualResetEvent.
Thread t5 = new Thread(ThreadProc);
t5.Name = "Thread_5";
t5.Start();
Thread.Sleep(500);
Console.WriteLine("\nPress Enter to call Set() and conclude the demo.");
Console.ReadLine();
mre.Set();
// If you run this example in Visual Studio, uncomment the following line:
//Console.ReadLine();
}
private static void ThreadProc()
{
string name = Thread.CurrentThread.Name;
Console.WriteLine(name + " starts and calls mre.WaitOne()");
mre.WaitOne();
Console.WriteLine(name + " ends.");
}
}
/* This example produces output similar to the following:
Start 3 named threads that block on a ManualResetEvent:
Thread_0 starts and calls mre.WaitOne()
Thread_1 starts and calls mre.WaitOne()
Thread_2 starts and calls mre.WaitOne()
When all three threads have started, press Enter to call Set()
to release all the threads.
Thread_2 ends.
Thread_0 ends.
Thread_1 ends.
When a ManualResetEvent is signaled, threads that call WaitOne()
do not block. Press Enter to show this.
Thread_3 starts and calls mre.WaitOne()
Thread_3 ends.
Thread_4 starts and calls mre.WaitOne()
Thread_4 ends.
Press Enter to call Reset(), so that threads once again block
when they call WaitOne().
Thread_5 starts and calls mre.WaitOne()
Press Enter to call Set() and conclude the demo.
Thread_5 ends.
*/
Imports System.Threading
Public Class Example
' mre is used to block and release threads manually. It is
' created in the unsignaled state.
Private Shared mre As New ManualResetEvent(False)
<MTAThreadAttribute> _
Shared Sub Main()
Console.WriteLine(vbLf & _
"Start 3 named threads that block on a ManualResetEvent:" & vbLf)
For i As Integer = 0 To 2
Dim t As New Thread(AddressOf ThreadProc)
t.Name = "Thread_" & i
t.Start()
Next i
Thread.Sleep(500)
Console.WriteLine(vbLf & _
"When all three threads have started, press Enter to call Set()" & vbLf & _
"to release all the threads." & vbLf)
Console.ReadLine()
mre.Set()
Thread.Sleep(500)
Console.WriteLine(vbLf & _
"When a ManualResetEvent is signaled, threads that call WaitOne()" & vbLf & _
"do not block. Press Enter to show this." & vbLf)
Console.ReadLine()
For i As Integer = 3 To 4
Dim t As New Thread(AddressOf ThreadProc)
t.Name = "Thread_" & i
t.Start()
Next i
Thread.Sleep(500)
Console.WriteLine(vbLf & _
"Press Enter to call Reset(), so that threads once again block" & vbLf & _
"when they call WaitOne()." & vbLf)
Console.ReadLine()
mre.Reset()
' Start a thread that waits on the ManualResetEvent.
Dim t5 As New Thread(AddressOf ThreadProc)
t5.Name = "Thread_5"
t5.Start()
Thread.Sleep(500)
Console.WriteLine(vbLf & "Press Enter to call Set() and conclude the demo.")
Console.ReadLine()
mre.Set()
' If you run this example in Visual Studio, uncomment the following line:
'Console.ReadLine()
End Sub
Private Shared Sub ThreadProc()
Dim name As String = Thread.CurrentThread.Name
Console.WriteLine(name & " starts and calls mre.WaitOne()")
mre.WaitOne()
Console.WriteLine(name & " ends.")
End Sub
End Class
' This example produces output similar to the following:
'
'Start 3 named threads that block on a ManualResetEvent:
'
'Thread_0 starts and calls mre.WaitOne()
'Thread_1 starts and calls mre.WaitOne()
'Thread_2 starts and calls mre.WaitOne()
'
'When all three threads have started, press Enter to call Set()
'to release all the threads.
'
'
'Thread_2 ends.
'Thread_0 ends.
'Thread_1 ends.
'
'When a ManualResetEvent is signaled, threads that call WaitOne()
'do not block. Press Enter to show this.
'
'
'Thread_3 starts and calls mre.WaitOne()
'Thread_3 ends.
'Thread_4 starts and calls mre.WaitOne()
'Thread_4 ends.
'
'Press Enter to call Reset(), so that threads once again block
'when they call WaitOne().
'
'
'Thread_5 starts and calls mre.WaitOne()
'
'Press Enter to call Set() and conclude the demo.
'
'Thread_5 ends.
Megjegyzések
ManualResetEventHasználja a , AutoResetEvent, és EventWaitHandle a szál interakció (vagy szál jel). További információ: A szinkronizálási primitívek áttekintése című cikk szál-interakciója vagy jelzési szakasza.
Amikor egy szál olyan tevékenységet kezd el, amelyet a többi szál folytatása előtt végre kell hajtania, meghívja a ManualResetEvent.Reset parancsot , hogy a nem jelzett állapotba kerüljön ManualResetEvent . Ez a szál úgy is felfogható, mint a vezérlő.ManualResetEvent A ManualResetEvent.WaitOne blokkot hívó szálak a jelre várva. Amikor a vezérlőszál befejezi a tevékenységet, meghívja a ManualResetEvent.Set parancsot , hogy jelezze, hogy a várakozó szálak továbbléphetnek. Minden várakozó szál felszabadul.
A jelzést követően a rendszer addig jelzi, ManualResetEvent amíg manuálisan nem állítja vissza a Reset() metódus meghívásával. Vagyis a hívások azonnal visszaérnek WaitOne .
Egy logikai érték konstruktornak való átadásával szabályozhatja a kezdeti állapotot ManualResetEvent : true ha a kezdeti állapot jelzést ad, és false ellenkező esetben.
ManualResetEventa metódusokkal és static a WaitAllWaitAny módszerekkel is használható.
A .NET Framework 2.0-s verziójától kezdve a ManualResetEvent a EventWaitHandle osztályból származik. Az A ManualResetEvent funkcionálisan egyenértékű a EventWaitHandle következővel létrehozottakkal EventResetMode.ManualReset: .
Note
Az osztálytól ManualResetEvent eltérően az EventWaitHandle osztály hozzáférést biztosít a nevesített rendszerszinkronizálási eseményekhez.
A .NET Framework 4.0-s verziójától kezdve a System.Threading.ManualResetEventSlim osztály a ManualResetEvent egyszerű alternatíva.
Konstruktorok
| Name | Description |
|---|---|
| ManualResetEvent(Boolean) |
Inicializálja az ManualResetEvent osztály új példányát logikai értékkel, amely jelzi, hogy a kezdeti állapot jelzésre van-e állítva. |
Mezők
| Name | Description |
|---|---|
| WaitTimeout |
Azt jelzi, hogy egy WaitAny(WaitHandle[], Int32, Boolean) művelet időtúllépést jelzett a várakozási fogópontok jelzése előtt. Ez a mező állandó. (Öröklődés forrása WaitHandle) |
Tulajdonságok
| Name | Description |
|---|---|
| Handle |
Elavult.
Elavult.
Lekéri vagy beállítja a natív operációsrendszer-leírót. (Öröklődés forrása WaitHandle) |
| SafeWaitHandle |
Lekéri vagy beállítja a natív operációsrendszer-leírót. (Öröklődés forrása WaitHandle) |
Metódusok
| Name | Description |
|---|---|
| Close() |
Az aktuális WaitHandleerőforrás összes erőforrását felszabadítja. (Öröklődés forrása WaitHandle) |
| CreateObjRef(Type) |
Létrehoz egy objektumot, amely tartalmazza a távoli objektumokkal való kommunikációhoz használt proxy létrehozásához szükséges összes releváns információt. (Öröklődés forrása MarshalByRefObject) |
| Dispose() |
Az osztály aktuális példánya által használt összes erőforrást felszabadítja WaitHandle . (Öröklődés forrása WaitHandle) |
| Dispose(Boolean) |
Ha egy származtatott osztályban felül van bírálva, kiadja a nem felügyelt erőforrásokat, amelyeket a WaitHandlerendszer használ, és opcionálisan felszabadítja a felügyelt erőforrásokat. (Öröklődés forrása WaitHandle) |
| Equals(Object) |
Meghatározza, hogy a megadott objektum egyenlő-e az aktuális objektummal. (Öröklődés forrása Object) |
| GetAccessControl() |
EventWaitHandleSecurity Lekéri az aktuális EventWaitHandle objektum által képviselt elnevezett rendszeresemény hozzáférés-vezérlési biztonságát képviselő objektumot. (Öröklődés forrása EventWaitHandle) |
| GetHashCode() |
Ez az alapértelmezett kivonatoló függvény. (Öröklődés forrása Object) |
| GetLifetimeService() |
Elavult.
Lekéri a példány élettartamszabályzatát vezérlő aktuális élettartam-szolgáltatásobjektumot. (Öröklődés forrása MarshalByRefObject) |
| GetType() |
Lekéri az Type aktuális példányt. (Öröklődés forrása Object) |
| InitializeLifetimeService() |
Elavult.
Beolvas egy élettartam-szolgáltatásobjektumot a példány élettartam-szabályzatának szabályozásához. (Öröklődés forrása MarshalByRefObject) |
| MemberwiseClone() |
Az aktuális Objectpéldány sekély másolatát hozza létre. (Öröklődés forrása Object) |
| MemberwiseClone(Boolean) |
Az aktuális MarshalByRefObject objektum sekély másolatát hozza létre. (Öröklődés forrása MarshalByRefObject) |
| Reset() |
Az esemény állapotát nem aláírtra állítja, ami miatt a szálak blokkolva lesznek. |
| Reset() |
Az esemény állapotát nem hozzárendelt állapotra állítja, így a szálak blokkolva lesznek. (Öröklődés forrása EventWaitHandle) |
| Set() |
Beállítja az esemény állapotát jelzésre, amely lehetővé teszi egy vagy több várakozó szál folytatását. |
| Set() |
Beállítja az esemény állapotát jelzésre, így egy vagy több várakozó szál továbbhaladhat. (Öröklődés forrása EventWaitHandle) |
| SetAccessControl(EventWaitHandleSecurity) |
Beállítja egy névvel ellátott rendszeresemény hozzáférés-vezérlési biztonságát. (Öröklődés forrása EventWaitHandle) |
| ToString() |
Az aktuális objektumot jelképező sztringet ad vissza. (Öröklődés forrása Object) |
| WaitOne() |
Blokkolja az aktuális szálat, amíg az áram WaitHandle nem kap jelet. (Öröklődés forrása WaitHandle) |
| WaitOne(Int32, Boolean) |
Blokkolja az aktuális szálat, amíg az aktuális WaitHandle nem kap jelet, egy 32 bites aláírt egész számmal adja meg az időintervallumot, és adja meg, hogy a várakozás előtt ki kell-e lépnie a szinkronizálási tartományból. (Öröklődés forrása WaitHandle) |
| WaitOne(Int32) |
Blokkolja az aktuális szálat, amíg az aktuális WaitHandle nem kap jelet, egy 32 bites aláírt egész számmal adja meg az időintervallumot ezredmásodpercben. (Öröklődés forrása WaitHandle) |
| WaitOne(TimeSpan, Boolean) |
Letiltja az aktuális szálat, amíg az aktuális példány nem kap jelet, az időintervallum megadásához és annak megadásához, TimeSpan hogy a várakozás előtt kilépjen-e a szinkronizálási tartományból. (Öröklődés forrása WaitHandle) |
| WaitOne(TimeSpan) |
Letiltja az aktuális szálat, amíg az aktuális példány nem kap jelet az TimeSpan időintervallum megadásához. (Öröklődés forrása WaitHandle) |
Explicit interfész-implementációk
| Name | Description |
|---|---|
| IDisposable.Dispose() |
Ez az API a termékinfrastruktúrát támogatja, és közvetlenül a kódból nem használható. Felszabadítja a .-hez használt összes erőforrást WaitHandle. (Öröklődés forrása WaitHandle) |
Bővítő metódusok
| Name | Description |
|---|---|
| GetAccessControl(EventWaitHandle) |
A megadott |
| GetSafeWaitHandle(WaitHandle) |
Lekéri a natív operációs rendszer várakozási fogópontjának biztonságos fogópontját. |
| SetAccessControl(EventWaitHandle, EventWaitHandleSecurity) |
Beállítja a megadott esemény várakozási leírójának biztonsági leíróit. |
| SetSafeWaitHandle(WaitHandle, SafeWaitHandle) |
Beállít egy biztonságos fogópontot a natív operációs rendszer várakozási fogópontjához. |
A következőre érvényes:
Szálbiztonság
Ez az osztály szálbiztos.