Thread 建構函式
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
初始化 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
一個代理,代表當執行緒開始執行時要呼叫的方法。
例外狀況
start 是 null。
範例
以下範例展示了建立並使用 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 代理,代表當執行緒開始執行時要呼叫的方法。
例外狀況
參數 start 為 null。
範例
以下程式碼範例展示了如何建立執行靜態方法的執行緒。
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 若其堆疊大小大於預設堆疊大小,則會被忽略。 沒例外拋出。
例外狀況
start 是 null。
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 若其堆疊大小大於預設堆疊大小,則會被忽略。 沒例外拋出。
例外狀況
start 是 null。
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>