この記事は機械翻訳されています。英語版の記事を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語

ManualResetEvent クラス

 

公開日: 2016年10月

イベントが発生したことを、1 つ以上の待機中のスレッドに通知します。 このクラスは継承できません。

名前空間:   System.Threading
アセンブリ:  mscorlib (mscorlib.dll 内)

System.Object
  System.MarshalByRefObject
    System.Threading.WaitHandle
      System.Threading.EventWaitHandle
        System.Threading.ManualResetEvent

[ComVisibleAttribute(true)]
[HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true, 
	ExternalThreading = true)]
public sealed class ManualResetEvent : EventWaitHandle

名前説明
System_CAPS_pubmethodManualResetEvent(Boolean)

新しいインスタンスを初期化、 ManualResetEvent クラスに初期状態をシグナル状態に設定するかどうかを示すブール値を使用します。

名前説明
System_CAPS_pubpropertyHandle

互換性のために残されています。ネイティブ オペレーティング システム ハンドルを取得または設定します。(WaitHandle から継承されます。)

System_CAPS_pubpropertySafeWaitHandle

ネイティブ オペレーティング システム ハンドルを取得または設定します。(WaitHandle から継承されます。)

名前説明
System_CAPS_pubmethodClose()

現在の WaitHandle によって保持されているすべてのリソースを解放します。(WaitHandle から継承されます。)

System_CAPS_pubmethodCreateObjRef(Type)

リモート オブジェクトとの通信に使用するプロキシの生成に必要なすべての関連情報を格納しているオブジェクトを作成します。(MarshalByRefObject から継承されます。)

System_CAPS_pubmethodDispose()

WaitHandle クラスの現在のインスタンスによって使用されているすべてのリソースを解放します。(WaitHandle から継承されます。)

System_CAPS_pubmethodEquals(Object)

指定したオブジェクトが、現在のオブジェクトと等しいかどうかを判断します。(Object から継承されます。)

System_CAPS_pubmethodGetAccessControl()

現在の EventWaitHandle オブジェクトによって表される名前付きシステム イベントのアクセス制御セキュリティを表す EventWaitHandleSecurity オブジェクトを取得します。(EventWaitHandle から継承されます。)

System_CAPS_pubmethodGetHashCode()

既定のハッシュ関数として機能します。(Object から継承されます。)

System_CAPS_pubmethodGetLifetimeService()

このインスタンスの有効期間ポリシーを制御する現在の有効期間サービス オブジェクトを取得します。(MarshalByRefObject から継承されます。)

System_CAPS_pubmethodGetType()

現在のインスタンスの Type を取得します。(Object から継承されます。)

System_CAPS_pubmethodInitializeLifetimeService()

このインスタンスの有効期間ポリシーを制御する有効期間サービス オブジェクトを取得します。(MarshalByRefObject から継承されます。)

System_CAPS_pubmethodReset()

イベントの状態を非シグナル状態に設定し、スレッドをブロックします。(EventWaitHandle から継承されます。)

System_CAPS_pubmethodSet()

イベントの状態をシグナル状態に設定し、待機している 1 つ以上のスレッドが進行できるようにします。(EventWaitHandle から継承されます。)

System_CAPS_pubmethodSetAccessControl(EventWaitHandleSecurity)

名前付きシステム イベントのアクセス制御セキュリティを設定します。(EventWaitHandle から継承されます。)

System_CAPS_pubmethodToString()

現在のオブジェクトを表す文字列を返します。(Object から継承されます。)

System_CAPS_pubmethodWaitOne()

現在の WaitHandle がシグナルを受け取るまで、現在のスレッドをブロックします。(WaitHandle から継承されます。)

System_CAPS_pubmethodWaitOne(Int32)

32 ビット符号付き整数を使用して時間間隔をミリ秒単位で指定し、現在の WaitHandle がシグナルを受信するまで、現在のスレッドをブロックします。(WaitHandle から継承されます。)

System_CAPS_pubmethodWaitOne(Int32, Boolean)

現在の WaitHandle がシグナルを受信するまで現在のスレッドをブロックします。時間間隔を指定するために 32 ビット符号付き整数を使用し、待機の前でも同期ドメインを終了するかどうかを指定します。(WaitHandle から継承されます。)

System_CAPS_pubmethodWaitOne(TimeSpan)

TimeSpan を使用して時間間隔を指定し、現在のインスタンスがシグナルを受信するまで現在のスレッドをブロックします。(WaitHandle から継承されます。)

System_CAPS_pubmethodWaitOne(TimeSpan, Boolean)

現在のインスタンスがシグナルを受信するまで現在のスレッドをブロックします。TimeSpan を使用して時間間隔を指定し、待機の前でも同期ドメインを終了するかどうかを指定します。(WaitHandle から継承されます。)

名前説明
System_CAPS_pubmethodGetSafeWaitHandle()

ネイティブのオペレーティング システムの待機ハンドルのセーフ ハンドルを取得します。(WaitHandleExtensions によって定義されています。)

System_CAPS_pubmethodSetSafeWaitHandle(SafeWaitHandle)

ネイティブのオペレーティング システムの待機ハンドルのセーフ ハンドルを設定します。(WaitHandleExtensions によって定義されています。)

.NET framework version 2.0 では、 ManualResetEvent から、新しい派生 EventWaitHandle クラスです。 A ManualResetEvent に相当する機能は、 EventWaitHandle 混ぜ合わせて、 EventResetMode.ManualResetです。

System_CAPS_noteメモ

異なり、 ManualResetEvent 、クラス、 EventWaitHandle クラスは、名前付きシステム同期イベントへのアクセスを提供します。

ManualResetEvent 通知することによって、互いに通信するためにスレッドをできるようにします。 通常、このような通信では、他のスレッドを続行する前にあるスレッドが完了する必要がありますタスクに関するものです。

スレッドが完了しないと他のアクティビティの開始時にスレッドの実行を呼び出す ResetManualResetEvent 非シグナル状態にします。 このスレッドはようなものの制御、 ManualResetEventです。 スレッドの呼び出しに WaitOne 上、 ManualResetEvent はブロックすると、シグナルを待機しています。 呼び出しスレッドを制御するには、アクティビティが完了すると、 Set を待機しているスレッドが続行できないことを通知します。 すべての待機中のスレッドが解放されます。

シグナル状態されて ManualResetEvent 手動でリセットされるまでシグナル状態のままです。 つまり、するために呼び出す WaitOne にすぐに返ります。

初期状態を制御する、 ManualResetEvent ブール値をコンス トラクターに渡すことによって true 初期状態がシグナル状態になる場合と false それ以外の場合。

ManualResetEvent 使用することもできます、 staticWaitAllWaitAny メソッドです。

スレッドの同期機構の詳細については、次を参照してください。 ManualResetEvent and ManualResetEventSlim 概念説明のドキュメントです。

次の例でどのように ManualResetEvent 動作します。 例の先頭で、 ManualResetEvent シグナルの状態で (つまり、 false コンス トラクターに渡されます)。 例 3 つのスレッドでブロックされるので、 ManualResetEvent を呼び出してその WaitOne メソッドです。 押されたとき、 Enter キーの例では、 Set メソッドで、次の 3 つのすべてのスレッドを解放します。 動作と比較してみて、 AutoResetEvent クラスは、各リリースの後に自動的にリセットするでは一度に 1 つのスレッドを解放します。

キーを押して、 Enter キーが再度実現する、 ManualResetEvent までシグナル状態のままになります、 Reset メソッドが呼び出されます: 例では、2 つ以上のスレッドが起動します。 呼び出すとき、これらのスレッドがブロックされない、 WaitOne メソッドが、代わりに完了するまで実行します。

キーを押して、 Enter キーを呼び出す例をもう一度押すと、 Reset メソッドを呼び出すときにブロックを 1 つの複数のスレッドを開始して WaitOneです。 キーを押して、 Enter キーのいずれかの呼び出しの最後に Set リリース最後のスレッドと、プログラムを終了します。

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.
 */

ユニバーサル Windows プラットフォーム
8 以降で使用可能
.NET Framework
1.1 以降で使用可能
ポータブル クラス ライブラリ
サポート対象: 移植可能 .NET プラットフォーム
Silverlight
2.0 以降で使用可能
Windows Phone Silverlight
7.0 以降で使用可能
Windows Phone
8.1 以降で使用可能

このクラスは、スレッド セーフです。

トップに戻る
表示: