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

ManualResetEventSlim クラス

 

公開日: 2016年10月

規模を小さくバージョンの提供 ManualResetEventします。

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

System.Object
  System.Threading.ManualResetEventSlim

[ComVisibleAttribute(false)]
[HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true, 
	ExternalThreading = true)]
public class ManualResetEventSlim : IDisposable

名前説明
System_CAPS_pubmethodManualResetEventSlim()

新しいインスタンスを初期化、 ManualResetEventSlim クラスを非シグナルの初期状態です。

System_CAPS_pubmethodManualResetEventSlim(Boolean)

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

System_CAPS_pubmethodManualResetEventSlim(Boolean, Int32)

新しいインスタンスを初期化、 ManualResetEventSlim クラスに初期状態をシグナル状態に設定するかどうかを示すブール値と指定されたスピン カウントを使用します。

名前説明
System_CAPS_pubpropertyIsSet

イベントが設定されているかどうかを取得します。

System_CAPS_pubpropertySpinCount

カーネル ベースの待機操作に戻る前に発生するスピン待機の数を取得します。

System_CAPS_pubpropertyWaitHandle

基になる取得 WaitHandle オブジェクトの ManualResetEventSlimです。

名前説明
System_CAPS_pubmethodDispose()

ManualResetEventSlim クラスの現在のインスタンスによって使用されているすべてのリソースを解放します。

System_CAPS_protmethodDispose(Boolean)

ManualResetEventSlim が使用しているアンマネージ リソースを解放します。オプションとして、マネージ リソースを解放することもできます。

System_CAPS_pubmethodEquals(Object)

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

System_CAPS_protmethodFinalize()

オブジェクトが、ガベージ コレクションによって収集される前に、リソースの解放とその他のクリーンアップ操作の実行を試みることができるようにします。(Object から継承されます。)

System_CAPS_pubmethodGetHashCode()

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

System_CAPS_pubmethodGetType()

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

System_CAPS_protmethodMemberwiseClone()

現在の Object の簡易コピーを作成します。(Object から継承されます。)

System_CAPS_pubmethodReset()

イベントの状態を非シグナル状態に設定し、スレッドをブロックします。

System_CAPS_pubmethodSet()

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

System_CAPS_pubmethodToString()

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

System_CAPS_pubmethodWait()

現在まで、現在のスレッドをブロック ManualResetEventSlim が設定されます。

System_CAPS_pubmethodWait(CancellationToken)

現在まで、現在のスレッドをブロック ManualResetEventSlim がシグナルを受け取るを観察しながら、 CancellationTokenです。

System_CAPS_pubmethodWait(Int32)

現在まで、現在のスレッドをブロック ManualResetEventSlim 設定すると、32 ビット符号付き整数を使用して時間間隔を計測します。

System_CAPS_pubmethodWait(Int32, CancellationToken)

現在まで、現在のスレッドをブロック ManualResetEventSlim を観察しながら、時間間隔を計るため 32 ビット符号付き整数を使用して、設定、 CancellationTokenです。

System_CAPS_pubmethodWait(TimeSpan)

現在まで、現在のスレッドをブロック ManualResetEventSlim を使用して、設定、 TimeSpan 時間間隔を計測します。

System_CAPS_pubmethodWait(TimeSpan, CancellationToken)

現在まで、現在のスレッドをブロック ManualResetEventSlim を使用して、設定、 TimeSpan を観察しながら、時間間隔を測定する、 CancellationTokenです。

このクラスを使用するにはよりもパフォーマンスを向上させる ManualResetEvent に非常に短い待機時間が予測されるとき、およびイベントは、プロセス境界を越えることはありません。 ManualResetEventSlim シグナル状態になるイベントを待機している間、短い時間で回転ビジー状態が使用されます。 待機時間が短く、スピンできます待つよりも安価待機ハンドルを使用しています。 ただし、イベントが一定期間内でシグナル状態になるいない場合は、 ManualResetEventSlim 標準イベント ハンドルの待機を使用します。

次の例では、使用する方法、 ManualResetEventSlimです。 使用の詳細については SpinCount このタイプの使い方に関する他のベスト プラクティスを参照してくださいと ManualResetEvent and ManualResetEventSlimです。

using System;
using System.Threading;
using System.Threading.Tasks;
class MRESDemo
{

    static void Main()
    {
        MRES_SetWaitReset();
        MRES_SpinCountWaitHandle();
    }
    // Demonstrates:
    //      ManualResetEventSlim construction
    //      ManualResetEventSlim.Wait()
    //      ManualResetEventSlim.Set()
    //      ManualResetEventSlim.Reset()
    //      ManualResetEventSlim.IsSet
    static void MRES_SetWaitReset()
    {
        ManualResetEventSlim mres1 = new ManualResetEventSlim(false); // initialize as unsignaled
        ManualResetEventSlim mres2 = new ManualResetEventSlim(false); // initialize as unsignaled
        ManualResetEventSlim mres3 = new ManualResetEventSlim(true);  // initialize as signaled

        // Start an asynchronous Task that manipulates mres3 and mres2
        var observer = Task.Factory.StartNew(() =>
        {
            mres1.Wait();
            Console.WriteLine("observer sees signaled mres1!");
            Console.WriteLine("observer resetting mres3...");
            mres3.Reset(); // should switch to unsignaled
            Console.WriteLine("observer signalling mres2");
            mres2.Set();
        });

        Console.WriteLine("main thread: mres3.IsSet = {0} (should be true)", mres3.IsSet);
        Console.WriteLine("main thread signalling mres1");
        mres1.Set(); // This will "kick off" the observer Task
        mres2.Wait(); // This won't return until observer Task has finished resetting mres3
        Console.WriteLine("main thread sees signaled mres2!");
        Console.WriteLine("main thread: mres3.IsSet = {0} (should be false)", mres3.IsSet);

        // It's good form to Dispose() a ManualResetEventSlim when you're done with it
        observer.Wait(); // make sure that this has fully completed
        mres1.Dispose();
        mres2.Dispose();
        mres3.Dispose();
    }

    // Demonstrates:
    //      ManualResetEventSlim construction w/ SpinCount
    //      ManualResetEventSlim.WaitHandle
    static void MRES_SpinCountWaitHandle()
    {
        // Construct a ManualResetEventSlim with a SpinCount of 1000
        // Higher spincount => longer time the MRES will spin-wait before taking lock
        ManualResetEventSlim mres1 = new ManualResetEventSlim(false, 1000);
        ManualResetEventSlim mres2 = new ManualResetEventSlim(false, 1000);

        Task bgTask = Task.Factory.StartNew(() =>
        {
            // Just wait a little
            Thread.Sleep(100);

            // Now signal both MRESes
            Console.WriteLine("Task signalling both MRESes");
            mres1.Set();
            mres2.Set();
        });

        // A common use of MRES.WaitHandle is to use MRES as a participant in 
        // WaitHandle.WaitAll/WaitAny.  Note that accessing MRES.WaitHandle will
        // result in the unconditional inflation of the underlying ManualResetEvent.
        WaitHandle.WaitAll(new WaitHandle[] { mres1.WaitHandle, mres2.WaitHandle });
        Console.WriteLine("WaitHandle.WaitAll(mres1.WaitHandle, mres2.WaitHandle) completed.");

        // Clean up
        bgTask.Wait();
        mres1.Dispose();
        mres2.Dispose();
    }
}

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

すべてのパブリック、プロテクト メンバー ManualResetEventSlim スレッド セーフでは、必要がありますのみ Dispose を除き、複数のスレッドから同時に使用される場合がある際に使用されるに対して他のすべての操作、 ManualResetEventSlim が完了し、リセットすると、これは、イベントにアクセスする他のスレッドがない場合にのみ使用しています。

トップに戻る
表示: