AutoResetEvent(Boolean) Konstruktor
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Initialisiert eine neue Instanz der AutoResetEvent Klasse mit einem booleschen Wert, der angibt, ob der Anfangszustand signalisiert werden soll.
public:
AutoResetEvent(bool initialState);
public AutoResetEvent(bool initialState);
new System.Threading.AutoResetEvent : bool -> System.Threading.AutoResetEvent
Public Sub New (initialState As Boolean)
Parameter
- initialState
- Boolean
true den zu signalisierenden Anfangszustand festzulegen; false um den Anfangszustand auf nicht signalisiert festzulegen.
Beispiele
Im folgenden Beispiel wird eine AutoResetEvent Zum Synchronisieren der Aktivitäten von zwei Threads verwendet. Der erste Thread, der der Anwendungsthread ist, wird ausgeführt Main. Es schreibt Werte in die geschützte Ressource, bei der es sich um ein static (Shared in Visual Basic)-Feld mit dem Namen number handelt. Der zweite Thread führt die statische ThreadProc Methode aus, die die von Main.
Die ThreadProc Methode wartet auf die AutoResetEvent. Wenn Main die Set Methode für die AutoResetEventMethode aufgerufen wird, liest die ThreadProc Methode einen Wert. Die AutoResetEvent sofortige Zurücksetzung wird ausgeführt, sodass die ThreadProc Methode erneut wartet.
Die Programmlogik garantiert, dass die ThreadProc Methode nie zweimal denselben Wert liest. Es garantiert nicht, dass die ThreadProc Methode jeden Wert liest, der von Main. Diese Garantie würde eine zweite AutoResetEvent Sperre erfordern.
Nach jedem Schreibvorgang Main wird die Methode aufgerufen Thread.Sleep , um dem zweiten Thread die Möglichkeit zur Ausführung zu geben. Andernfalls würde auf einem Computer mit nur einem Prozessor Main viele Werte zwischen zwei lesevorgängen geschrieben.
using System;
using System.Threading;
namespace AutoResetEvent_Examples
{
class MyMainClass
{
//Initially not signaled.
const int numIterations = 100;
static AutoResetEvent myResetEvent = new AutoResetEvent(false);
static int number;
static void Main()
{
//Create and start the reader thread.
Thread myReaderThread = new Thread(new ThreadStart(MyReadThreadProc));
myReaderThread.Name = "ReaderThread";
myReaderThread.Start();
for(int i = 1; i <= numIterations; i++)
{
Console.WriteLine("Writer thread writing value: {0}", i);
number = i;
//Signal that a value has been written.
myResetEvent.Set();
//Give the Reader thread an opportunity to act.
Thread.Sleep(1);
}
//Terminate the reader thread.
myReaderThread.Abort();
}
static void MyReadThreadProc()
{
while(true)
{
//The value will not be read until the writer has written
// at least once since the last read.
myResetEvent.WaitOne();
Console.WriteLine("{0} reading value: {1}", Thread.CurrentThread.Name, number);
}
}
}
}
Imports System.Threading
Namespace AutoResetEvent_Examples
Class MyMainClass
'Initially not signaled.
Private Const numIterations As Integer = 100
Private Shared myResetEvent As New AutoResetEvent(False)
Private Shared number As Integer
<MTAThread> _
Shared Sub Main()
'Create and start the reader thread.
Dim myReaderThread As New Thread(AddressOf MyReadThreadProc)
myReaderThread.Name = "ReaderThread"
myReaderThread.Start()
Dim i As Integer
For i = 1 To numIterations
Console.WriteLine("Writer thread writing value: {0}", i)
number = i
'Signal that a value has been written.
myResetEvent.Set()
'Give the Reader thread an opportunity to act.
Thread.Sleep(1)
Next i
'Terminate the reader thread.
myReaderThread.Abort()
End Sub
Shared Sub MyReadThreadProc()
While True
'The value will not be read until the writer has written
' at least once since the last read.
myResetEvent.WaitOne()
Console.WriteLine("{0} reading value: {1}", Thread.CurrentThread.Name, number)
End While
End Sub
End Class
End Namespace 'AutoResetEvent_Examples