Thread Konstruktoren
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Initialisiert eine neue Instanz der Thread-Klasse.
Überlädt
| Name | Beschreibung |
|---|---|
| Thread(ParameterizedThreadStart) |
Initialisiert eine neue Instanz der Thread Klasse, wobei ein Delegat angegeben wird, mit dem ein Objekt an den Thread übergeben werden kann, wenn der Thread gestartet wird. |
| Thread(ThreadStart) |
Initialisiert eine neue Instanz der Thread-Klasse. |
| Thread(ParameterizedThreadStart, Int32) |
Initialisiert eine neue Instanz der Thread Klasse, wobei ein Delegat angegeben wird, mit dem ein Objekt an den Thread übergeben werden kann, wenn der Thread gestartet wird und die maximale Stapelgröße für den Thread angegeben wird. |
| Thread(ThreadStart, Int32) |
Initialisiert eine neue Instanz der Thread Klasse, wobei die maximale Stapelgröße für den Thread angegeben wird. |
Thread(ParameterizedThreadStart)
- Quelle:
- Thread.cs
- Quelle:
- Thread.cs
- Quelle:
- Thread.cs
- Quelle:
- Thread.cs
- Quelle:
- Thread.cs
Initialisiert eine neue Instanz der Thread Klasse, wobei ein Delegat angegeben wird, mit dem ein Objekt an den Thread übergeben werden kann, wenn der Thread gestartet wird.
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)
Parameter
- start
- ParameterizedThreadStart
Ein Delegat, der die Methoden darstellt, die aufgerufen werden sollen, wenn dieser Thread mit der Ausführung beginnt.
Ausnahmen
start ist null.
Beispiele
Das folgende Beispiel zeigt die Syntax zum Erstellen und Verwenden eines ParameterizedThreadStart Delegaten mit einer statischen Methode und einer Instanzmethode.
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.'
Hinweise
Ein Thread beginnt nicht mit der Ausführung, wenn er erstellt wird. Rufen Sie die Methode auf, um den Thread für die Start Ausführung zu planen. Verwenden Sie die Start(Object) Methodenüberladung, um ein Datenobjekt an den Thread zu übergeben.
Note
Visual Basic Benutzer können den ThreadStart-Konstruktor beim Erstellen eines Threads weglassen. Verwenden Sie den AddressOf Operator, wenn Sie die Methode übergeben, Dim t As New Thread(AddressOf ThreadProc)z. B. . Visual Basic ruft automatisch den Konstruktor ThreadStart auf.
Weitere Informationen
Gilt für:
Thread(ThreadStart)
- Quelle:
- Thread.cs
- Quelle:
- Thread.cs
- Quelle:
- Thread.cs
- Quelle:
- Thread.cs
- Quelle:
- Thread.cs
Initialisiert eine neue Instanz der Thread-Klasse.
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)
Parameter
- start
- ThreadStart
Ein ThreadStart Delegat, der die Methoden darstellt, die aufgerufen werden sollen, wenn dieser Thread mit der Ausführung beginnt.
Ausnahmen
Der start Parameter ist null.
Beispiele
Das folgende Codebeispiel zeigt, wie Sie einen Thread erstellen, der eine statische Methode ausführt.
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
Das folgende Codebeispiel zeigt, wie Sie einen Thread erstellen, der eine Instanzmethode ausführt.
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
Hinweise
Ein Thread beginnt nicht mit der Ausführung, wenn er erstellt wird. Rufen Sie die Methode auf, um den Thread für die Start Ausführung zu planen.
Note
Visual Basic Benutzer können den ThreadStart-Konstruktor beim Erstellen eines Threads weglassen. Verwenden Sie den AddressOf Operator, wenn Sie die Methode übergeben, Dim t As New Thread(AddressOf ThreadProc)z. B. . Visual Basic ruft automatisch den Konstruktor ThreadStart auf.
Weitere Informationen
Gilt für:
Thread(ParameterizedThreadStart, Int32)
- Quelle:
- Thread.cs
- Quelle:
- Thread.cs
- Quelle:
- Thread.cs
- Quelle:
- Thread.cs
- Quelle:
- Thread.cs
Initialisiert eine neue Instanz der Thread Klasse, wobei ein Delegat angegeben wird, mit dem ein Objekt an den Thread übergeben werden kann, wenn der Thread gestartet wird und die maximale Stapelgröße für den Thread angegeben wird.
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)
Parameter
- start
- ParameterizedThreadStart
Ein ParameterizedThreadStart Delegat, der die Methoden darstellt, die aufgerufen werden sollen, wenn dieser Thread mit der Ausführung beginnt.
- maxStackSize
- Int32
Die maximale Stapelgröße in Byte, die vom Thread verwendet werden soll, oder 0, um die standardmäßige maximale Stapelgröße zu verwenden, die im Header für die ausführbare Datei angegeben ist.
Wichtig Für teilweise vertrauenswürdigen Code wird ignoriert, maxStackSize wenn er größer als die Standardstapelgröße ist. Es wird keine Ausnahme ausgelöst.
Ausnahmen
start ist null.
maxStackSize ist kleiner als 0 (null).
Hinweise
Vermeiden Sie diese Konstruktorüberladung. Die von der Thread(ParameterizedThreadStart) Konstruktorüberladung verwendete Standardstapelgröße ist die empfohlene Stapelgröße für Threads. Wenn ein Thread Speicherprobleme hat, ist die wahrscheinlichste Ursache programmierfehler, z. B. unendliche Rekursion.
Important
Ab dem .NET Framework 4 kann nur voll vertrauenswürdiger Code maxStackSize auf einen Wert festlegen, der größer als die Standardstapelgröße (1 MB) ist. Wenn ein größerer Wert angegeben maxStackSize wird, wenn Code mit teilweiser Vertrauensstellung ausgeführt wird, maxStackSize wird ignoriert, und die Standardstapelgröße wird verwendet. Es wird keine Ausnahme ausgelöst. Code auf jeder Vertrauensstufe kann auf einen Wert festgelegt werden maxStackSize , der kleiner als die Standardstapelgröße ist.
Note
Wenn Sie eine vollständig vertrauenswürdige Bibliothek entwickeln, die von teilweise vertrauenswürdigem Code verwendet wird und Sie einen Thread starten müssen, der einen großen Stapel erfordert, müssen Sie vor dem Erstellen des Threads voll vertrauenswürdig sein, oder die Standardstapelgröße wird verwendet. Führen Sie dies nur aus, wenn Sie den Code, der im Thread ausgeführt wird, vollständig steuern.
Ist maxStackSize die Mindeststapelgröße kleiner als die mindeste Stapelgröße, wird die mindeste Stapelgröße verwendet. Wenn maxStackSize es sich nicht um ein Vielfaches der Seitengröße handelt, wird sie auf das nächste größere Vielfache des Seitenformats gerundet.
Note
Bei Versionen von Microsoft Windows vor Windows XP und Windows Server 2003 wird maxStackSize ignoriert, und die im ausführbaren Header angegebene Stapelgröße wird verwendet.
Wenn Sie eine sehr kleine Stapelgröße angeben, müssen Sie die Stapelüberlauf-Probing möglicherweise deaktivieren. Wenn der Stapel stark eingeschränkt ist, kann das Probing selbst zu einem Stapelüberlauf führen. Um die Stapelüberlauf-Probing zu deaktivieren, fügen Sie der Anwendungskonfigurationsdatei in einer .NET Framework-App Folgendes hinzu.
<configuration>
<runtime>
<disableStackOverflowProbing enabled="true"/>
</runtime>
</configuration>
Gilt für:
Thread(ThreadStart, Int32)
- Quelle:
- Thread.cs
- Quelle:
- Thread.cs
- Quelle:
- Thread.cs
- Quelle:
- Thread.cs
- Quelle:
- Thread.cs
Initialisiert eine neue Instanz der Thread Klasse, wobei die maximale Stapelgröße für den Thread angegeben wird.
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)
Parameter
- start
- ThreadStart
Ein ThreadStart Delegat, der die Methoden darstellt, die aufgerufen werden sollen, wenn dieser Thread mit der Ausführung beginnt.
- maxStackSize
- Int32
Die maximale Stapelgröße in Byte, die vom Thread verwendet werden soll, oder 0, um die standardmäßige maximale Stapelgröße zu verwenden, die im Header für die ausführbare Datei angegeben ist.
Wichtig Für teilweise vertrauenswürdigen Code wird ignoriert, maxStackSize wenn er größer als die Standardstapelgröße ist. Es wird keine Ausnahme ausgelöst.
Ausnahmen
start ist null.
maxStackSize ist kleiner als 0 (null).
Hinweise
Vermeiden Sie diese Konstruktorüberladung. Die von der Thread(ThreadStart) Konstruktorüberladung verwendete Standardstapelgröße ist die empfohlene Stapelgröße für Threads. Wenn ein Thread Speicherprobleme hat, ist die wahrscheinlichste Ursache programmierfehler, z. B. unendliche Rekursion.
Important
Ab dem .NET Framework 4 kann nur voll vertrauenswürdiger Code maxStackSize auf einen Wert festlegen, der größer als die Standardstapelgröße (1 MB) ist. Wenn ein größerer Wert angegeben maxStackSize wird, wenn Code mit teilweiser Vertrauensstellung ausgeführt wird, maxStackSize wird ignoriert, und die Standardstapelgröße wird verwendet. Es wird keine Ausnahme ausgelöst. Code auf jeder Vertrauensstufe kann auf einen Wert festgelegt werden maxStackSize , der kleiner als die Standardstapelgröße ist.
Note
Wenn Sie eine vollständig vertrauenswürdige Bibliothek entwickeln, die von teilweise vertrauenswürdigem Code verwendet wird und Sie einen Thread starten müssen, der einen großen Stapel erfordert, müssen Sie vor dem Erstellen des Threads voll vertrauenswürdig sein, oder die Standardstapelgröße wird verwendet. Führen Sie dies nur aus, wenn Sie den Code, der im Thread ausgeführt wird, vollständig steuern.
Ist maxStackSize die Mindeststapelgröße kleiner als die mindeste Stapelgröße, wird die mindeste Stapelgröße verwendet. Wenn maxStackSize es sich nicht um ein Vielfaches der Seitengröße handelt, wird sie auf das nächste größere Vielfache des Seitenformats gerundet. Wenn Sie z. B. die .NET Framework Version 2.0 auf Windows Vista verwenden, ist 256 KB (262.144 Bytes) die minimale Stapelgröße, und die Seitengröße beträgt 64 KB (65.536 Bytes).
Note
Bei Versionen von Microsoft Windows vor Windows XP und Windows Server 2003 wird maxStackSize ignoriert, und die im ausführbaren Header angegebene Stapelgröße wird verwendet.
Wenn Sie eine sehr kleine Stapelgröße angeben, müssen Sie die Stapelüberlauf-Probing möglicherweise deaktivieren. Wenn der Stapel stark eingeschränkt ist, kann das Probing selbst zu einem Stapelüberlauf führen. Um die Stapelüberlauf-Probing zu deaktivieren, fügen Sie der Anwendungskonfigurationsdatei in einer .NET Framework-App Folgendes hinzu.
<configuration>
<runtime>
<disableStackOverflowProbing enabled="true"/>
</runtime>
</configuration>