Thread 建構函式

定義

初始化 Thread 類別的新執行個體。

多載

名稱 Description
Thread(ParameterizedThreadStart)

初始化該類別的新實例 Thread ,指定一個代理,允許在執行緒啟動時傳遞物件給執行緒。

Thread(ThreadStart)

初始化 Thread 類別的新執行個體。

Thread(ParameterizedThreadStart, Int32)

初始化類別的新實例 Thread ,指定一個代理,允許在執行緒啟動時傳遞物件,並指定執行緒的最大堆疊大小。

Thread(ThreadStart, Int32)

初始化該類別的新實例 Thread ,指定執行緒的最大堆疊大小。

Thread(ParameterizedThreadStart)

來源:
Thread.cs
來源:
Thread.cs
來源:
Thread.cs
來源:
Thread.cs
來源:
Thread.cs

初始化該類別的新實例 Thread ,指定一個代理,允許在執行緒啟動時傳遞物件給執行緒。

public:
 Thread(System::Threading::ParameterizedThreadStart ^ start);
public Thread(System.Threading.ParameterizedThreadStart start);
new System.Threading.Thread : System.Threading.ParameterizedThreadStart -> System.Threading.Thread
Public Sub New (start As ParameterizedThreadStart)

參數

start
ParameterizedThreadStart

一個代理,代表當執行緒開始執行時要呼叫的方法。

例外狀況

startnull

範例

以下範例展示了建立並使用 ParameterizedThreadStart 代理的語法,同時包含靜態方法與實例方法。

using System;
using System.Threading;

public class Work
{
    public static void Main()
    {
        // Start a thread that calls a parameterized static method.
        Thread newThread = new Thread(Work.DoWork);
        newThread.Start(42);

        // Start a thread that calls a parameterized instance method.
        Work w = new Work();
        newThread = new Thread(w.DoMoreWork);
        newThread.Start("The answer.");
    }
 
    public static void DoWork(object data)
    {
        Console.WriteLine("Static thread procedure. Data='{0}'",
            data);
    }

    public void DoMoreWork(object data)
    {
        Console.WriteLine("Instance thread procedure. Data='{0}'",
            data);
    }
}
// This example displays output like the following:
//       Static thread procedure. Data='42'
//       Instance thread procedure. Data='The answer.'
open System.Threading

type Work() =
    static member DoWork(data: obj) =
        printfn $"Static thread procedure. Data='{data}'"

    member _.DoMoreWork(data: obj) =
        printfn $"Instance thread procedure. Data='{data}'"

// Start a thread that calls a parameterized static method.
let newThread = Thread(ParameterizedThreadStart Work.DoWork)
newThread.Start 42

// Start a thread that calls a parameterized instance method.
let w = Work()
let newThread2 = Thread(ParameterizedThreadStart w.DoMoreWork)
newThread.Start "The answer."

// This example displays output like the following:
//       Static thread procedure. Data='42'
//       Instance thread procedure. Data='The answer.'
Imports System.Threading

Public Class Work
    Shared Sub Main()
        ' Start a thread that calls a parameterized static method.
        Dim newThread As New Thread(AddressOf Work.DoWork)
        newThread.Start(42)

        ' Start a thread that calls a parameterized instance method.
        Dim w As New Work()
        newThread = New Thread(AddressOf w.DoMoreWork)
        newThread.Start("The answer.")
    End Sub
 
    Public Shared Sub DoWork(ByVal data As Object)
        Console.WriteLine("Static thread procedure. Data='{0}'",
                          data)
    End Sub

    Public Sub DoMoreWork(ByVal data As Object) 
        Console.WriteLine("Instance thread procedure. Data='{0}'",
                          data)
    End Sub
End Class
' This example displays output like the following:
'    Static thread procedure. Data='42'
'    Instance thread procedure. Data='The answer.'

備註

執行緒不會在建立時開始執行。 要排程執行緒,請呼叫 該 Start 方法。 要將資料物件傳給執行緒,請使用 Start(Object) 方法過載。

Note

Visual Basic使用者在建立執行緒時可以省略 ThreadStart 建構子。 例如,當你通過方法時,可以使用AddressOf運算子。 Dim t As New Thread(AddressOf ThreadProc) Visual Basic 會自動呼叫 ThreadStart 建構子。

另請參閱

適用於

Thread(ThreadStart)

來源:
Thread.cs
來源:
Thread.cs
來源:
Thread.cs
來源:
Thread.cs
來源:
Thread.cs

初始化 Thread 類別的新執行個體。

public:
 Thread(System::Threading::ThreadStart ^ start);
public Thread(System.Threading.ThreadStart start);
new System.Threading.Thread : System.Threading.ThreadStart -> System.Threading.Thread
Public Sub New (start As ThreadStart)

參數

start
ThreadStart

一個 ThreadStart 代理,代表當執行緒開始執行時要呼叫的方法。

例外狀況

參數 startnull

範例

以下程式碼範例展示了如何建立執行靜態方法的執行緒。

using System;
using System.Threading;

class Test
{
    static void Main() 
    {
        Thread newThread = 
            new Thread(new ThreadStart(Work.DoWork));
        newThread.Start();
    }
}

class Work 
{
    Work() {}

    public static void DoWork() {}
}
open System.Threading

module Work =
    let doWork () = ()

let newThread = Thread(ThreadStart Work.doWork)
newThread.Start()
Imports System.Threading

Public Class Test
    <MTAThread> _
    Shared Sub Main()
        Dim newThread As New Thread(AddressOf Work.DoWork)
        newThread.Start()
    End Sub
End Class

Public Class Work 

    Private Sub New()
    End Sub

    Shared Sub DoWork()
    End Sub

End Class

以下程式碼範例說明如何建立執行實例方法的執行緒。

using System;
using System.Threading;

class Test
{
    static void Main() 
    {
        Work threadWork = new Work();
        Thread newThread = 
            new Thread(new ThreadStart(threadWork.DoWork));
        newThread.Start();
    }
}

class Work 
{
    public Work() {}

    public void DoWork() {}
}
open System.Threading

type Work() =
    member _.DoWork() = ()

let threadWork = Work()
let newThread = Thread(ThreadStart threadWork.DoWork)
newThread.Start()
Imports System.Threading

Public Class Test
    <MTAThread> _
    Shared Sub Main() 
        Dim threadWork As New Work()
        Dim newThread As New Thread(AddressOf threadWork.DoWork)
        newThread.Start()
    End Sub
End Class

Public Class Work

    Sub New()
    End Sub

    Sub DoWork() 
    End Sub

End Class

備註

執行緒不會在建立時開始執行。 要排程執行緒,請呼叫 該 Start 方法。

Note

Visual Basic使用者在建立執行緒時可以省略 ThreadStart 建構子。 例如,當你通過方法時,可以使用AddressOf運算子。 Dim t As New Thread(AddressOf ThreadProc) Visual Basic 會自動呼叫 ThreadStart 建構子。

另請參閱

適用於

Thread(ParameterizedThreadStart, Int32)

來源:
Thread.cs
來源:
Thread.cs
來源:
Thread.cs
來源:
Thread.cs
來源:
Thread.cs

初始化類別的新實例 Thread ,指定一個代理,允許在執行緒啟動時傳遞物件,並指定執行緒的最大堆疊大小。

public:
 Thread(System::Threading::ParameterizedThreadStart ^ start, int maxStackSize);
public Thread(System.Threading.ParameterizedThreadStart start, int maxStackSize);
new System.Threading.Thread : System.Threading.ParameterizedThreadStart * int -> System.Threading.Thread
Public Sub New (start As ParameterizedThreadStart, maxStackSize As Integer)

參數

start
ParameterizedThreadStart

一個 ParameterizedThreadStart 代理,代表當執行緒開始執行時要呼叫的方法。

maxStackSize
Int32

執行緒使用的最大堆疊大小(位元組)或 0 以執行檔標頭中指定的預設最大堆疊大小。

重要性 對於部分受信任的程式碼, maxStackSize 若其堆疊大小大於預設堆疊大小,則會被忽略。 沒例外拋出。

例外狀況

startnull

maxStackSize 小於零。

備註

避免使用這種建構器過載。 建構子超載使用的 Thread(ParameterizedThreadStart) 預設堆疊大小是執行緒建議的堆疊大小。 如果執行緒有記憶體問題,最可能的原因是程式設計錯誤,例如無限遞迴。

Important

從 .NET Framework 4 開始,只有完全受信任的程式碼才能將 maxStackSize 設定為大於預設堆疊大小(1 MB)的值。 若在部分信任maxStackSize執行時指定maxStackSize較大值,則忽略預設堆疊大小。 沒例外拋出。 任何信任層級的程式碼都可以設定 maxStackSize 小於預設堆疊大小的值。

Note

如果你正在開發一個完全受信任的函式庫,且該函式庫會被部分受信任的程式碼使用,且你需要啟動一個需要大型堆疊的執行緒,必須在建立執行緒前先確立完全信任,否則會使用預設的堆疊大小。 除非你完全控制執行緒上的程式碼,否則不要這麼做。

maxStackSize 小於最小堆疊大小,則使用最小堆疊大小。 若 maxStackSize 不是頁面大小的倍數,則四捨五入至頁面大小的下一個較大倍數。

Note

在 Windows XP Windows Server 2003 之前的 Microsoft Windows 版本中,maxStackSize 會被忽略,並使用執行檔標頭中指定的堆疊大小。

如果你指定非常小的堆疊大小,可能需要關閉堆疊溢位探測。 當堆疊受到嚴重限制時,探測本身可能引發堆疊溢位。 要停用堆疊溢位探測,請在 .NET Framework 應用程式中將以下內容加入你的應用程式設定檔。

<configuration>
  <runtime>
    <disableStackOverflowProbing enabled="true"/>
  </runtime>
</configuration>

適用於

Thread(ThreadStart, Int32)

來源:
Thread.cs
來源:
Thread.cs
來源:
Thread.cs
來源:
Thread.cs
來源:
Thread.cs

初始化該類別的新實例 Thread ,指定執行緒的最大堆疊大小。

public:
 Thread(System::Threading::ThreadStart ^ start, int maxStackSize);
public Thread(System.Threading.ThreadStart start, int maxStackSize);
new System.Threading.Thread : System.Threading.ThreadStart * int -> System.Threading.Thread
Public Sub New (start As ThreadStart, maxStackSize As Integer)

參數

start
ThreadStart

一個 ThreadStart 代理,代表當執行緒開始執行時要呼叫的方法。

maxStackSize
Int32

執行緒使用的最大堆疊大小(位元組)或 0 以執行檔標頭中指定的預設最大堆疊大小。

重要性 對於部分受信任的程式碼, maxStackSize 若其堆疊大小大於預設堆疊大小,則會被忽略。 沒例外拋出。

例外狀況

startnull

maxStackSize 小於零。

備註

避免使用這種建構器過載。 建構子超載使用的 Thread(ThreadStart) 預設堆疊大小是執行緒建議的堆疊大小。 如果執行緒有記憶體問題,最可能的原因是程式設計錯誤,例如無限遞迴。

Important

從 .NET Framework 4 開始,只有完全受信任的程式碼才能將 maxStackSize 設定為大於預設堆疊大小(1 MB)的值。 若在部分信任maxStackSize執行時指定maxStackSize較大值,則忽略預設堆疊大小。 沒例外拋出。 任何信任層級的程式碼都可以設定 maxStackSize 小於預設堆疊大小的值。

Note

如果你正在開發一個完全受信任的函式庫,且該函式庫會被部分受信任的程式碼使用,且你需要啟動一個需要大型堆疊的執行緒,必須在建立執行緒前先確立完全信任,否則會使用預設的堆疊大小。 除非你完全控制執行緒上的程式碼,否則不要這麼做。

maxStackSize 小於最小堆疊大小,則使用最小堆疊大小。 若 maxStackSize 不是頁面大小的倍數,則四捨五入至頁面大小的下一個較大倍數。 例如,如果你在 Windows Vista 上使用 .NET Framework 2.0 版本,256KB(262,144 位元組)是最小堆疊大小,頁面大小為 64KB(65,536 位元組)。

Note

在 Windows XP Windows Server 2003 之前的 Microsoft Windows 版本中,maxStackSize 會被忽略,並使用執行檔標頭中指定的堆疊大小。

如果你指定非常小的堆疊大小,可能需要關閉堆疊溢位探測。 當堆疊受到嚴重限制時,探測本身可能引發堆疊溢位。 要停用堆疊溢位探測,請在 .NET Framework 應用程式中將以下內容加入你的應用程式設定檔。

<configuration>
  <runtime>
    <disableStackOverflowProbing enabled="true"/>
  </runtime>
</configuration>

適用於