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

WaitHandle.WaitAll メソッド (WaitHandle[])

 

指定した配列内のすべての要素がシグナルを受信するまで待機します。

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

public static bool WaitAll(
	WaitHandle[] waitHandles
)

パラメーター

waitHandles
Type: System.Threading.WaitHandle[]

現在のインスタンスが待機する対象のオブジェクトを格納している WaitHandle 配列。 この配列には、同一オブジェクトに対する複数の参照を含めることはできません。

戻り値

Type: System.Boolean

waitHandles 内のすべての要素がシグナルを受信した場合は true。それ以外の場合は、待機を続けます。

Exception Condition
ArgumentNullException

waitHandles パラメーターが null です。 または

waitHandles 配列内の 1 つ以上のオブジェクトが null です。

または

waitHandles は要素を持たない配列で、.NET Framework のバージョンが 2.0 以降です。

DuplicateWaitObjectException
System_CAPS_noteメモ

Windows ストア アプリ用 .NET または ポータブル クラス ライブラリでは、基本クラスの例外である ArgumentException を代わりにキャッチします。

waitHandles 配列は重複する要素を含んでいます。

NotSupportedException

waitHandles のオブジェクトの数が、システムで許可されている範囲を超えています。

または

STAThreadAttribute 属性は、現在のスレッドのスレッド プロシージャに適用されており、waitHandles には複数の要素が含まれています。

ApplicationException

waitHandles は要素を持たない配列で、.NET Framework のバージョンが 1.0 または 1.1 です。

AbandonedMutexException

ミュー テックスを解放しないままスレッドが終了したため、待機が完了しました。 Windows 98 または Windows Millennium Edition では、この例外はスローされません。

InvalidOperationException

waitHandles 配列には、別のアプリケーション ドメインのWaitHandle の透過プロキシが含まれます。

AbandonedMutexException is new in the .NET Framework version 2.0. In previous versions, the WaitAll method returns true when a mutex is abandoned. An abandoned mutex often indicates a serious coding error. In the case of a system-wide mutex, it might indicate that an application has been terminated abruptly (for example, by using Windows Task Manager). The exception contains information useful for debugging.

The Overload:System.Threading.WaitHandle.WaitAll method returns when all the handles are signaled. On some implementations, if more than 64 handles are passed, a T:System.NotSupportedException is thrown. If the array contains duplicates, the call fails with a T:System.DuplicateWaitObjectException.

System_CAPS_noteメモ

The Overload:System.Threading.WaitHandle.WaitAll method is not supported on threads that have T:System.STAThreadAttribute.

Calling this method overload is equivalent to calling the M:System.Threading.WaitHandle.WaitAll(System.Threading.WaitHandle[],System.Int32,System.Boolean) method overload and specifying -1 (or F:System.Threading.Timeout.Infinite) for millisecondsTimeoutand true for exitContext.

The following code example shows how to use the thread pool to asynchronously create and write to a group of files. Each write operation is queued as a work item and signals when it is finished. The main thread waits for all the items to signal and then exits.

using System;
using System.IO;
using System.Security.Permissions;
using System.Threading;

class Test
{
    static void Main()
    {
        const int numberOfFiles = 5;
        string dirName = @"C:\TestTest";
        string fileName;

        byte[] byteArray;
        Random randomGenerator = new Random();

        ManualResetEvent[] manualEvents = 
            new ManualResetEvent[numberOfFiles];
        State stateInfo;

        if(!Directory.Exists(dirName))
        {
            Directory.CreateDirectory(dirName);
        }

        // Queue the work items that create and write to the files.
        for(int i = 0; i < numberOfFiles; i++)
        {
            fileName = string.Concat(
                dirName, @"\Test", i.ToString(), ".dat");

            // Create random data to write to the file.
            byteArray = new byte[1000000];
            randomGenerator.NextBytes(byteArray);

            manualEvents[i] = new ManualResetEvent(false);

            stateInfo = 
                new State(fileName, byteArray, manualEvents[i]);

            ThreadPool.QueueUserWorkItem(new WaitCallback(
                Writer.WriteToFile), stateInfo);
        }

        // Since ThreadPool threads are background threads, 
        // wait for the work items to signal before exiting.
        WaitHandle.WaitAll(manualEvents);
        Console.WriteLine("Files written - main exiting.");
    }
}

// Maintain state to pass to WriteToFile.
class State
{
    public string fileName;
    public byte[] byteArray;
    public ManualResetEvent manualEvent;

    public State(string fileName, byte[] byteArray, 
        ManualResetEvent manualEvent)
    {
        this.fileName = fileName;
        this.byteArray = byteArray;
        this.manualEvent = manualEvent;
    }
}

class Writer
{
    static int workItemCount = 0;
    Writer() {}

    public static void WriteToFile(object state)
    {
        int workItemNumber = workItemCount;
        Interlocked.Increment(ref workItemCount);
        Console.WriteLine("Starting work item {0}.",
            workItemNumber.ToString());
        State stateInfo = (State)state;
        FileStream fileWriter = null;

        // Create and write to the file.
        try
        {
            fileWriter = new FileStream(
                stateInfo.fileName, FileMode.Create);
            fileWriter.Write(stateInfo.byteArray, 
                0, stateInfo.byteArray.Length);
        }
        finally
        {
            if(fileWriter != null)
            {
                fileWriter.Close();
            }

            // Signal Main that the work item has finished.
            Console.WriteLine("Ending work item {0}.", 
                workItemNumber.ToString());
            stateInfo.manualEvent.Set();
        }
    }
}

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