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
Thread(ParameterizedThreadStart) |
Initialisiert eine neue Instanz der Thread-Klasse und gibt dabei einen Delegaten an, der das Übergeben eines Objekts an den Thread bei dessen Start ermöglicht. |
Thread(ThreadStart) |
Initialisiert eine neue Instanz der Thread-Klasse. |
Thread(ParameterizedThreadStart, Int32) |
Initialisiert eine neue Instanz der Thread-Klasse und gibt dabei einen Delegaten, der das Übergeben eines Objekts an den Thread bei dessen Start ermöglicht, sowie eine maximale Stapelgröße für den Thread an. |
Thread(ThreadStart, Int32) |
Initialisiert eine neue Instanz der Thread-Klasse und gibt die maximale Stapelgröße für den Thread an. |
Thread(ParameterizedThreadStart)
- Quelle:
- Thread.cs
- Quelle:
- Thread.cs
- Quelle:
- Thread.cs
Initialisiert eine neue Instanz der Thread-Klasse und gibt dabei einen Delegaten an, der das Übergeben eines Objekts an den Thread bei dessen Start ermöglicht.
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 bei Beginn der Ausführung dieses Threads aufgerufen werden müssen.
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 namespace System;
using namespace System::Threading;
namespace SystemThreadingExample
{
public ref class Work
{
public:
void StartThreads()
{
// Start a thread that calls a parameterized static method.
Thread^ newThread = gcnew
Thread(gcnew ParameterizedThreadStart(Work::DoWork));
newThread->Start(42);
// Start a thread that calls a parameterized instance method.
Work^ someWork = gcnew Work;
newThread = gcnew Thread(
gcnew ParameterizedThreadStart(someWork,
&Work::DoMoreWork));
newThread->Start("The answer.");
}
static void DoWork(Object^ data)
{
Console::WriteLine("Static thread procedure. Data='{0}'",
data);
}
void DoMoreWork(Object^ data)
{
Console::WriteLine("Instance thread procedure. Data='{0}'",
data);
}
};
}
//Entry point of example application
int main()
{
SystemThreadingExample::Work^ samplework =
gcnew SystemThreadingExample::Work();
samplework->StartThreads();
}
// This example displays output like the following:
// Static thread procedure. Data='42'
// Instance thread procedure. Data='The answer.'
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 die Ausführung des Start Threads zu planen. Verwenden Sie die Methodenüberladung, um ein Datenobjekt an den Start(Object) Thread zu übergeben.
Hinweis
Visual Basic-Benutzer können den ThreadStart Konstruktor beim Erstellen eines Threads weglassen. Verwenden Sie den AddressOf
-Operator, wenn Sie Ihre -Methode übergeben, z. B Dim t As New Thread(AddressOf ThreadProc)
. . Visual Basic ruft den ThreadStart Konstruktor automatisch auf.
Weitere Informationen
Gilt für:
Thread(ThreadStart)
- 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 bei Beginn der Ausführung dieses Threads aufgerufen werden müssen.
Ausnahmen
Der start
-Parameter ist null
.
Beispiele
Das folgende Codebeispiel zeigt, wie Sie einen Thread erstellen, der eine statische Methode ausführt.
using namespace System;
using namespace System::Threading;
ref class Work
{
private:
Work(){}
public:
static void DoWork(){}
};
int main()
{
Thread^ newThread = gcnew Thread( gcnew ThreadStart( &Work::DoWork ) );
newThread->Start();
}
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 namespace System;
using namespace System::Threading;
ref class Work
{
public:
Work(){}
void DoWork(){}
};
int main()
{
Work^ threadWork = gcnew Work;
Thread^ newThread = gcnew Thread( gcnew ThreadStart( threadWork, &Work::DoWork ) );
newThread->Start();
}
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 die Ausführung des Start Threads zu planen.
Hinweis
Visual Basic-Benutzer können den ThreadStart Konstruktor beim Erstellen eines Threads weglassen. Verwenden Sie den AddressOf
-Operator, wenn Sie Ihre -Methode übergeben, z. B Dim t As New Thread(AddressOf ThreadProc)
. . Visual Basic ruft den ThreadStart Konstruktor automatisch auf.
Weitere Informationen
Gilt für:
Thread(ParameterizedThreadStart, Int32)
- Quelle:
- Thread.cs
- Quelle:
- Thread.cs
- Quelle:
- Thread.cs
Initialisiert eine neue Instanz der Thread-Klasse und gibt dabei einen Delegaten, der das Übergeben eines Objekts an den Thread bei dessen Start ermöglicht, sowie eine maximale Stapelgröße für den Thread an.
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 bei Beginn der Ausführung dieses Threads aufgerufen werden müssen.
- maxStackSize
- Int32
Die maximale Stapelgröße, in Bytes, für den Thread, oder 0 (null), wenn die angegebene maximale Standardstapelgröße aus dem Header der ausführbaren Datei verwendet werden soll.
Wichtig Bei teilweise vertrauenswürdigem 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 Null.
Hinweise
Vermeiden Sie die Verwendung dieser 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 ein Programmierfehler, z. B. unendliche Rekursion.
Wichtig
Ab dem .NET Framework 4 kann nur voll vertrauenswürdiger Code auf einen Wert festgelegt maxStackSize
werden, der größer als die Standardstapelgröße (1 Megabyte) ist. Wenn ein größerer Wert für maxStackSize
angegeben wird, wenn Code mit teilweise vertrauenswürdiger Ausführung 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 maxStackSize
werden, der kleiner als die Standardstapelgröße ist.
Hinweis
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 volle Vertrauenswürdigkeiten bestätigen, andernfalls wird die Standardstapelgröße verwendet. Tun Sie dies nur, wenn Sie den Code, der im Thread ausgeführt wird, vollständig steuern.
Wenn maxStackSize
kleiner als die minimale Stapelgröße ist, wird die minimale Stapelgröße verwendet. Wenn maxStackSize
kein Vielfaches der Seitengröße ist, wird es auf das nächstgrößere Vielfache der Seitengröße gerundet.
Hinweis
In Versionen von Microsoft Windows vor Windows XP und Windows Server 2003 maxStackSize
wird ignoriert, und die im ausführbaren Header angegebene Stapelgröße wird verwendet.
Wenn Sie eine sehr kleine Stapelgröße angeben, müssen Sie möglicherweise die Stapelüberlaufüberprüfung deaktivieren. Wenn der Stapel stark eingeschränkt ist, kann die Untersuchung selbst zu einem Stapelüberlauf führen. Um die Stapelüberlaufüberprüfung zu deaktivieren, fügen Sie Ihrer 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
Initialisiert eine neue Instanz der Thread-Klasse und gibt die maximale Stapelgröße für den Thread an.
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 bei Beginn der Ausführung dieses Threads aufgerufen werden müssen.
- maxStackSize
- Int32
Die maximale Stapelgröße, in Bytes, für den Thread, oder 0 (null), wenn die angegebene maximale Standardstapelgröße aus dem Header der ausführbaren Datei verwendet werden soll.
Wichtig Bei teilweise vertrauenswürdigem 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 Null.
Hinweise
Vermeiden Sie die Verwendung dieser 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 ein Programmierfehler, z. B. unendliche Rekursion.
Wichtig
Ab dem .NET Framework 4 kann nur voll vertrauenswürdiger Code auf einen Wert festgelegt maxStackSize
werden, der größer als die Standardstapelgröße (1 Megabyte) ist. Wenn ein größerer Wert für maxStackSize
angegeben wird, wenn Code mit teilweise vertrauenswürdiger Ausführung 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 maxStackSize
werden, der kleiner als die Standardstapelgröße ist.
Hinweis
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 volle Vertrauenswürdigkeiten bestätigen, andernfalls wird die Standardstapelgröße verwendet. Tun Sie dies nur, wenn Sie den Code, der im Thread ausgeführt wird, vollständig steuern.
Wenn maxStackSize
kleiner als die minimale Stapelgröße ist, wird die minimale Stapelgröße verwendet. Wenn maxStackSize
kein Vielfaches der Seitengröße ist, wird es auf das nächstgrößere Vielfache der Seitengröße gerundet. Wenn Sie beispielsweise die .NET Framework Version 2.0 unter Windows Vista verwenden, ist 256 KB (262.144 Bytes) die mindeste Stapelgröße, und die Seitengröße beträgt 64 KB (65.536 Bytes).
Hinweis
In Versionen von Microsoft Windows vor Windows XP und Windows Server 2003 maxStackSize
wird ignoriert, und die im ausführbaren Header angegebene Stapelgröße wird verwendet.
Wenn Sie eine sehr kleine Stapelgröße angeben, müssen Sie möglicherweise die Stapelüberlaufüberprüfung deaktivieren. Wenn der Stapel stark eingeschränkt ist, kann die Untersuchung selbst zu einem Stapelüberlauf führen. Um die Stapelüberlaufüberprüfung zu deaktivieren, fügen Sie Ihrer Anwendungskonfigurationsdatei in einer .NET Framework-App Folgendes hinzu.
<configuration>
<runtime>
<disableStackOverflowProbing enabled="true"/>
</runtime>
</configuration>