AutoResetEvent(Boolean) Konstruktor

Definice

Inicializuje novou instanci AutoResetEvent třídy s logickou hodnotou označující, zda má být počáteční stav signalizován.

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

Parametry

initialState
Boolean

true nastavit počáteční stav, který má být signalován; false nastavit počáteční stav na nesignalizovat.

Příklady

Následující příklad používá AutoResetEvent k synchronizaci aktivit dvou vláken. První vlákno, což je vlákno aplikace, spustí Main. Zapíše hodnoty do chráněného prostředku, což je pole static (Shared v Visual Basic) s názvem number. Druhé vlákno spustí statickou ThreadProc metodu, která čte hodnoty zapsané .Main

Metoda ThreadProc čeká na AutoResetEvent. Při Main volání metody Setna AutoResetEvent , ThreadProc metoda přečte jednu hodnotu. Okamžitě AutoResetEvent se resetuje, takže ThreadProc metoda čeká znovu.

Logika programu zaručuje, že ThreadProc metoda nikdy nebude číst stejnou hodnotu dvakrát. Nezaručuje, že ThreadProc metoda bude číst každou hodnotu zapsanou Main. Tato záruka by vyžadovala druhý AutoResetEvent zámek.

Po každé operaci Main zápisu získá voláním Thread.Sleep metody druhé vlákno šanci spustit. Jinak by v počítači Main s jedním procesorem zapisoval mnoho hodnot mezi všemi dvěma operacemi čtení.

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

Platí pro

Viz také