Freigeben über


Thread Konstruktoren

Definition

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>

Gilt für: