WaitHandle.WaitAll 方法

定義

等候指定陣列中的所有項目都收到信號。

多載

WaitAll(WaitHandle[], TimeSpan, Boolean)

等候指定陣列中的所有項目都收到信號,使用 TimeSpan 值來指定時間間隔,並指定是否要先離開同步處理網域,再開始等候。

WaitAll(WaitHandle[], Int32, Boolean)

等候指定陣列中的所有項目都收到信號,使用 Int32 值來指定時間間隔,並指定是否要先離開同步處理網域,再開始等候。

WaitAll(WaitHandle[], TimeSpan)

等候指定陣列中的所有項目都收到信號,使用 TimeSpan 值來指定時間間隔。

WaitAll(WaitHandle[], Int32)

等候指定陣列中的所有項目都收到信號,使用 Int32 值來指定時間間隔。

WaitAll(WaitHandle[])

等候指定陣列中的所有項目都收到信號。

WaitAll(WaitHandle[], TimeSpan, Boolean)

來源:
WaitHandle.cs
來源:
WaitHandle.cs
來源:
WaitHandle.cs

等候指定陣列中的所有項目都收到信號,使用 TimeSpan 值來指定時間間隔,並指定是否要先離開同步處理網域,再開始等候。

C#
public static bool WaitAll (System.Threading.WaitHandle[] waitHandles, TimeSpan timeout, bool exitContext);

參數

waitHandles
WaitHandle[]

WaitHandle 陣列,包含目前執行個體將等候的物件。 這個陣列不能包含相同物件的多個參考。

timeout
TimeSpan

TimeSpan,代表要等候的毫秒數;或是 TimeSpan,代表永遠等候的 -1 毫秒。

exitContext
Boolean

true 表示在等候 (如果在同步內容中) 前結束內容的同步處理網域,並於之後重新取得,否則為 false

傳回

waitHandles 中的所有元素都收到訊號時,則為 true,否則為 false

例外狀況

waitHandles 參數為 null

-或-

waitHandles 陣列中的一或多個物件為 null

-或-

waitHandles 是沒有任何項目的陣列,且 .NET Framework 版本為 2.0 或更新版本。

waitHandles 陣列包含重複的項目。

waitHandles 中的物件數目超過系統允許的數目。

-或-

STAThreadAttribute 屬性會套用至目前執行緒的執行緒程序,且 waitHandles 包含多個項目。

waitHandles 是沒有任何項目的陣列,且 .NET Framework 版本為 1.0 或 1.1。

timeout 為 -1 毫秒以外的負數,表示無限逾時。

-或-

timeout 大於 Int32.MaxValue

由於執行緒結束時未釋放 Mutex,已結束等候。

waitHandles 陣列在另一個應用程式定義域中包含 WaitHandle 的 Transparent Proxy。

範例

下列程式代碼範例示範如何使用線程集區,以異步方式建立和寫入檔案群組。 每個寫入作業都會排入佇列作為工作專案,並在完成時發出訊號。 主線程會等候所有專案發出訊號,然後結束。

C#
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.
        if(WaitHandle.WaitAll(
            manualEvents, new TimeSpan(0, 0, 5), false))
        {
            Console.WriteLine("Files written - main exiting.");
        }
        else
        {
            // The wait operation times out.
            Console.WriteLine("Error writing files - 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();
        }
    }
}

備註

如果 timeout 為零,則方法不會封鎖。 它會測試等候句柄的狀態,並立即傳回 。

如果放棄 Mutex, AbandonedMutexException 則會擲回 。 放棄的 Mutex 通常表示嚴重的編碼錯誤。 在全系統 Mutex 的情況下,它可能表示應用程式已突然終止 (,例如使用 Windows 任務管理員) 。 例外狀況包含可用於偵錯的資訊。

方法 WaitAll 會在等候終止時傳回,這表示所有句柄都會發出訊號或發生逾時。 如果傳遞超過 64 個句柄, NotSupportedException 則會擲回 。 如果陣列包含重複專案,呼叫將會失敗。

備註

WaitAll處於狀態的STA線程不支援方法。

的最大值 timeoutInt32.MaxValue

結束內容

exitContext除非從非預設 Managed 內容內呼叫這個方法,否則參數沒有作用。 如果您的線程位於衍生自 ContextBoundObject之類別實例的呼叫內,則Managed內容可以是非預設的。 即使您目前正在不是衍生自 ContextBoundObject的類別上執行方法,例如 String,如果在 ContextBoundObject 目前應用程式域中的堆疊上,您仍可以位於非預設內容中。

當您的程式代碼在非預設內容中執行時,指定 true 會導致 exitContext 線程結束非預設受控內容 (,也就是在執行此方法之前轉換至默認內容) 。 線程會在呼叫這個方法完成之後,傳回原始的非預設內容。

當內容系結類別具有 SynchronizationAttribute 屬性時,結束內容可能會很有用。 在此情況下,類別成員的所有呼叫都會自動同步處理,而且同步處理網域是類別的整個程式代碼主體。 如果成員呼叫堆疊中的程式代碼呼叫此方法並指定 trueexitContext,則線程會結束同步處理網域,這可讓呼叫物件的任何成員上封鎖的線程繼續進行。 當這個方法傳回時,發出呼叫的線程必須等候重新進入同步處理網域。

適用於

.NET 9 和其他版本
產品 版本
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

WaitAll(WaitHandle[], Int32, Boolean)

來源:
WaitHandle.cs
來源:
WaitHandle.cs
來源:
WaitHandle.cs

等候指定陣列中的所有項目都收到信號,使用 Int32 值來指定時間間隔,並指定是否要先離開同步處理網域,再開始等候。

C#
public static bool WaitAll (System.Threading.WaitHandle[] waitHandles, int millisecondsTimeout, bool exitContext);

參數

waitHandles
WaitHandle[]

WaitHandle 陣列,包含目前執行個體將等候的物件。 這個陣列無法包含相同物件 (複本) 的多個參考。

millisecondsTimeout
Int32

要等候的毫秒數,如果要無限期等候,則為 Infinite (-1)。

exitContext
Boolean

true 表示在等候 (如果在同步內容中) 前結束內容的同步處理網域,並於之後重新取得,否則為 false

傳回

waitHandles 中的所有項目都收到信號時,則為 true;否則為 false

例外狀況

waitHandles 參數為 null

-或-

waitHandles 陣列中的一或多個物件為 null

-或-

waitHandles 是沒有任何項目的陣列,且 .NET Framework 版本為 2.0 或更新版本。

waitHandles 陣列包含重複的項目。

waitHandles 中的物件數目超過系統允許的數目。

-或-

目前的執行緒是 STA 狀態,而 waitHandles 包含多個元素。

waitHandles 是沒有任何項目的陣列,且 .NET Framework 版本為 1.0 或 1.1。

millisecondsTimeout 為 -1 以外的負數,表示無限逾時。

由於執行緒結束時未釋放 Mutex,已完成等候。

waitHandles 陣列在另一個應用程式定義域中包含 WaitHandle 的 Transparent Proxy。

範例

下列程式代碼範例示範如何使用線程集區,以異步方式建立和寫入檔案群組。 每個寫入作業都會排入佇列作為工作專案,並在完成時發出訊號。 主線程會等候所有專案發出訊號,然後結束。

C#
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.
        if(WaitHandle.WaitAll(manualEvents, 5000, false))
        {
            Console.WriteLine("Files written - main exiting.");
        }
        else
        {
            // The wait operation times out.
            Console.WriteLine("Error writing files - 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();
        }
    }
}

備註

如果 millisecondsTimeout 為零,則方法不會封鎖。 它會測試等候句柄的狀態,並立即傳回 。

如果放棄 Mutex, AbandonedMutexException 則會擲回 。 放棄的 Mutex 通常表示嚴重的編碼錯誤。 在全系統 Mutex 的情況下,它可能表示應用程式已突然終止 (,例如使用 Windows 任務管理員) 。 例外狀況包含可用於偵錯的資訊。

方法 WaitAll 會在等候終止時傳回,這表示當發出所有句柄的訊號或發生逾時時。 如果傳遞超過 64 個句柄, NotSupportedException 則會擲回 。 如果陣列中有重複項目,呼叫會失敗並出現 DuplicateWaitObjectException

備註

WaitAll處於狀態的STA線程不支援方法。

結束內容

exitContext除非從非預設 Managed 內容內呼叫這個方法,否則參數沒有作用。 如果您的線程位於衍生自 ContextBoundObject之類別實例的呼叫內,則Managed內容可以是非預設的。 即使您目前正在不是衍生自 ContextBoundObject的類別上執行方法,例如 String,如果在 ContextBoundObject 目前應用程式域中的堆疊上,您仍可以位於非預設內容中。

當您的程式代碼在非預設內容中執行時,指定 true 會導致 exitContext 線程結束非預設受控內容 (,也就是在執行此方法之前轉換至默認內容) 。 線程會在呼叫這個方法完成之後,傳回原始的非預設內容。

當內容系結類別具有 SynchronizationAttribute 屬性時,結束內容可能會很有用。 在此情況下,類別成員的所有呼叫都會自動同步處理,而且同步處理網域是類別的整個程式代碼主體。 如果成員呼叫堆疊中的程式代碼呼叫此方法並指定 trueexitContext,則線程會結束同步處理網域,這可讓呼叫物件的任何成員上封鎖的線程繼續進行。 當這個方法傳回時,進行呼叫的線程必須等候重新進入同步處理網域。

適用於

.NET 9 和其他版本
產品 版本
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

WaitAll(WaitHandle[], TimeSpan)

來源:
WaitHandle.cs
來源:
WaitHandle.cs
來源:
WaitHandle.cs

等候指定陣列中的所有項目都收到信號,使用 TimeSpan 值來指定時間間隔。

C#
public static bool WaitAll (System.Threading.WaitHandle[] waitHandles, TimeSpan timeout);

參數

waitHandles
WaitHandle[]

WaitHandle 陣列,包含目前執行個體將等候的物件。 這個陣列不能包含相同物件的多個參考。

timeout
TimeSpan

TimeSpan,代表要等候的毫秒數;或是 TimeSpan,代表永遠等候的 -1 毫秒。

傳回

waitHandles 中的所有項目都收到信號時,則為 true;否則為 false

例外狀況

waitHandles 參數為 null

-或-

waitHandles 陣列中的一或多個物件為 null

-或-

waitHandles 是不含任何項目的陣列。

waitHandles 陣列包含重複的項目。

注意:在適用於 Microsoft Store 的 .NET 應用程式可攜式類別庫中,請改為捕捉基底類別例外狀況 ArgumentException

waitHandles 中的物件數目超過系統允許的數目。

-或-

目前的執行緒是 STA 狀態,而 waitHandles 包含多個元素。

timeout 為 -1 毫秒以外的負數,表示無限逾時。

-或-

timeout 大於 Int32.MaxValue

由於執行緒結束時未釋放 Mutex,已結束等候。

waitHandles 陣列在另一個應用程式定義域中包含 WaitHandle 的 Transparent Proxy。

備註

如果 timeout 為零,則方法不會封鎖。 它會測試等候句柄的狀態,並立即傳回。

方法 WaitAll 會在等候終止時傳回,這表示所有句柄都會發出訊號或發生逾時。 如果傳遞超過 64 個 NotSupportedException 句柄,則會擲回 。 如果陣列包含重複專案,呼叫將會失敗。

備註

WaitAll在處於狀態的STA線程上不支援 方法。

最大 timeout 值為 Int32.MaxValue

呼叫這個方法多載與呼叫 WaitAll(WaitHandle[], TimeSpan, Boolean) 多載和針對 exitContext指定false相同。

適用於

.NET 9 和其他版本
產品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

WaitAll(WaitHandle[], Int32)

來源:
WaitHandle.cs
來源:
WaitHandle.cs
來源:
WaitHandle.cs

等候指定陣列中的所有項目都收到信號,使用 Int32 值來指定時間間隔。

C#
public static bool WaitAll (System.Threading.WaitHandle[] waitHandles, int millisecondsTimeout);

參數

waitHandles
WaitHandle[]

WaitHandle 陣列,包含目前執行個體將等候的物件。 這個陣列無法包含相同物件 (複本) 的多個參考。

millisecondsTimeout
Int32

要等候的毫秒數,如果要無限期等候,則為 Infinite (-1)。

傳回

waitHandles 中的所有項目都收到信號時,則為 true;否則為 false

例外狀況

waitHandles 參數為 null

-或-

waitHandles 陣列中的一或多個物件為 null

-或-

waitHandles 是不含任何項目的陣列。

waitHandles 陣列包含重複的項目。

注意:在適用於 Microsoft Store 的 .NET 應用程式可攜式類別庫中,請改為捕捉基底類別例外狀況 ArgumentException

waitHandles 中的物件數目超過系統允許的數目。

-或-

目前的執行緒是 STA 狀態,而 waitHandles 包含多個元素。

millisecondsTimeout 為 -1 以外的負數,表示無限逾時。

由於執行緒結束時未釋放 Mutex,已完成等候。

waitHandles 陣列在另一個應用程式定義域中包含 WaitHandle 的 Transparent Proxy。

備註

如果 millisecondsTimeout 為零,則方法不會封鎖。 它會測試等候句柄的狀態,並立即傳回。

方法 WaitAll 會在等候終止時傳回,這表示當發出所有句柄的訊號或發生逾時時。 如果傳遞超過 64 個 NotSupportedException 句柄,則會擲回 。 如果陣列中有重複項目,呼叫會失敗並 DuplicateWaitObjectException出現 。

備註

WaitAll在處於狀態的STA線程上不支援 方法。

呼叫這個方法多載與呼叫 WaitAll(WaitHandle[], Int32, Boolean) 多載和針對 exitContext指定false相同。

適用於

.NET 9 和其他版本
產品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

WaitAll(WaitHandle[])

來源:
WaitHandle.cs
來源:
WaitHandle.cs
來源:
WaitHandle.cs

等候指定陣列中的所有項目都收到信號。

C#
public static bool WaitAll (System.Threading.WaitHandle[] waitHandles);

參數

waitHandles
WaitHandle[]

WaitHandle 陣列,包含目前執行個體將等候的物件。 這個陣列不能包含相同物件的多個參考。

傳回

waitHandles 中的所有項目都收到信號時,則為 true;否則絕不會傳回這個方法。

例外狀況

waitHandles 參數為 null。 -或-

waitHandles 陣列中的一或多個物件為 null

-或-

waitHandles 是沒有任何項目的陣列,且 .NET Framework 版本為 2.0 或更新版本。

waitHandles 陣列包含重複的項目。

注意:在適用於 Microsoft Store 的 .NET 應用程式可攜式類別庫中,請改為捕捉基底類別例外狀況 ArgumentException

waitHandles 中的物件數目超過系統允許的數目。

-或-

目前的執行緒是 STA 狀態,而 waitHandles 包含多個元素。

waitHandles 是沒有任何項目的陣列,且 .NET Framework 版本為 1.0 或 1.1。

由於執行緒結束時未釋放 Mutex,已結束等候。

waitHandles 陣列在另一個應用程式定義域中包含 WaitHandle 的 Transparent Proxy。

範例

下列程式代碼範例示範如何使用線程集區,以異步方式建立和寫入檔案群組。 每個寫入作業都會排入佇列作為工作專案,並在完成時發出訊號。 主線程會等候所有專案發出訊號,然後結束。

C#
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();
        }
    }
}

備註

AbandonedMutexException 是 .NET Framework 2.0 版的新功能。 在舊版中 WaitAll ,方法會在 true 放棄 Mutex 時傳回。 已放棄的 Mutex 通常表示嚴重的程式代碼撰寫錯誤。 在全系統 Mutex 的情況下,它可能表示應用程式已突然終止 (例如,使用 Windows 任務管理員) 。 例外狀況包含適用於偵錯的資訊。

當發出所有句柄的訊號時,方法 WaitAll 會傳回 。 如果傳遞超過 64 個 NotSupportedException 句柄,則會擲回 。 如果陣列包含重複項目,呼叫會失敗並 DuplicateWaitObjectException出現 。

備註

WaitAll在處於狀態的STA線程上不支援 方法。

呼叫這個方法多載相當於呼叫 WaitAll(WaitHandle[], Int32, Boolean) 方法多載,併為 和 指定 -1 (或 Timeout.Infinite) millisecondsTimeouttrueexitContext

適用於

.NET 9 和其他版本
產品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0