AutoResetEvent(Boolean) Constructor

Definitie

Initialiseert een nieuw exemplaar van de AutoResetEvent klasse met een Booleaanse waarde die aangeeft of de initiële status moet worden ingesteld op gesignaleerd.

public:
 AutoResetEvent(bool initialState);
public AutoResetEvent(bool initialState);
new System.Threading.AutoResetEvent : bool -> System.Threading.AutoResetEvent
Public Sub New (initialState As Boolean)

Parameters

initialState
Boolean

true om de initiële status in te stellen op gesignaleerd; false om de initiële status in te stellen op niet-gesignaleerd.

Voorbeelden

In het volgende voorbeeld wordt een functie AutoResetEvent gebruikt om de activiteiten van twee threads te synchroniseren. De eerste thread, de toepassingsthread, wordt uitgevoerd Main. Er worden waarden naar de beveiligde resource geschreven. Dit is een static (Shared in Visual Basic) met de naam number. De tweede thread voert de statische ThreadProc methode uit, waarmee de waarden worden gelezen die zijn geschreven door Main.

De ThreadProc methode wacht op de AutoResetEvent. Wanneer Main de Set methode op de AutoResetEventmethode wordt aangeroepen, leest de ThreadProc methode één waarde. De AutoResetEvent methode wordt onmiddellijk opnieuw ingesteld, dus de ThreadProc methode wacht opnieuw.

De programmalogica garandeert dat de ThreadProc methode nooit twee keer dezelfde waarde zal lezen. Het garandeert niet dat de ThreadProc methode elke waarde leest die is geschreven door Main. Die garantie zou een tweede AutoResetEvent slot vereisen.

Na elke schrijfbewerking Main levert dit op door de Thread.Sleep methode aan te roepen, zodat de tweede thread een kans krijgt om uit te voeren. Anders zou op een computer Main met één processor veel waarden tussen twee leesbewerkingen worden geschreven.

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

Van toepassing op

Zie ook