Thread Constructors

Definitie

Initialiseert een nieuw exemplaar van de Thread klasse.

Overloads

Name Description
Thread(ParameterizedThreadStart)

Initialiseert een nieuw exemplaar van de Thread klasse, waarbij een gemachtigde wordt opgegeven waarmee een object kan worden doorgegeven aan de thread wanneer de thread wordt gestart.

Thread(ThreadStart)

Initialiseert een nieuw exemplaar van de Thread klasse.

Thread(ParameterizedThreadStart, Int32)

Initialiseert een nieuw exemplaar van de Thread klasse, waarbij een gemachtigde wordt opgegeven waarmee een object kan worden doorgegeven aan de thread wanneer de thread wordt gestart en de maximale stackgrootte voor de thread wordt opgegeven.

Thread(ThreadStart, Int32)

Initialiseert een nieuw exemplaar van de Thread klasse, waarbij de maximale stackgrootte voor de thread wordt opgegeven.

Thread(ParameterizedThreadStart)

Initialiseert een nieuw exemplaar van de Thread klasse, waarbij een gemachtigde wordt opgegeven waarmee een object kan worden doorgegeven aan de thread wanneer de thread wordt gestart.

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)

Parameters

start
ParameterizedThreadStart

Een gemachtigde die de methoden vertegenwoordigt die moeten worden aangeroepen wanneer deze thread wordt uitgevoerd.

Uitzonderingen

start is null.

Voorbeelden

In het volgende voorbeeld ziet u de syntaxis voor het maken en gebruiken van een ParameterizedThreadStart gemachtigde met een statische methode en een instantiemethode.

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.'

Opmerkingen

Een thread wordt niet uitgevoerd wanneer deze wordt gemaakt. Als u de thread wilt plannen voor uitvoering, roept u de Start methode aan. Als u een gegevensobject wilt doorgeven aan de thread, gebruikt u de overbelasting van de Start(Object) methode.

Note

Visual Basic gebruikers de ThreadStart constructor weglaten bij het maken van een thread. Gebruik de operator bij het AddressOf doorgeven van uw methode, bijvoorbeeld Dim t As New Thread(AddressOf ThreadProc). Visual Basic roept automatisch de ThreadStart constructor aan.

Zie ook

Van toepassing op

Thread(ThreadStart)

Initialiseert een nieuw exemplaar van de 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)

Parameters

start
ThreadStart

Een ThreadStart gemachtigde die de methoden vertegenwoordigt die moeten worden aangeroepen wanneer deze thread wordt uitgevoerd.

Uitzonderingen

De start parameter is null.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe u een thread maakt waarmee een statische methode wordt uitgevoerd.

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

In het volgende codevoorbeeld ziet u hoe u een thread maakt waarmee een exemplaarmethode wordt uitgevoerd.

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

Opmerkingen

Een thread wordt niet uitgevoerd wanneer deze wordt gemaakt. Als u de thread wilt plannen voor uitvoering, roept u de Start methode aan.

Note

Visual Basic gebruikers de ThreadStart constructor weglaten bij het maken van een thread. Gebruik de operator bij het AddressOf doorgeven van uw methode, bijvoorbeeld Dim t As New Thread(AddressOf ThreadProc). Visual Basic roept automatisch de ThreadStart constructor aan.

Zie ook

Van toepassing op

Thread(ParameterizedThreadStart, Int32)

Initialiseert een nieuw exemplaar van de Thread klasse, waarbij een gemachtigde wordt opgegeven waarmee een object kan worden doorgegeven aan de thread wanneer de thread wordt gestart en de maximale stackgrootte voor de thread wordt opgegeven.

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)

Parameters

start
ParameterizedThreadStart

Een ParameterizedThreadStart gemachtigde die de methoden vertegenwoordigt die moeten worden aangeroepen wanneer deze thread wordt uitgevoerd.

maxStackSize
Int32

De maximale stackgrootte, in bytes, die door de thread moet worden gebruikt of 0 om de standaard maximale stackgrootte te gebruiken die is opgegeven in de header voor het uitvoerbare bestand.

Belangrijk Voor gedeeltelijk vertrouwde code maxStackSize wordt genegeerd als deze groter is dan de standaardstackgrootte. Er wordt geen uitzondering opgeworpen.

Uitzonderingen

start is null.

maxStackSize is kleiner dan nul.

Opmerkingen

Vermijd het gebruik van deze constructoroverbelasting. De standaardstackgrootte die door de Thread(ParameterizedThreadStart) constructoroverbelasting wordt gebruikt, is de aanbevolen stackgrootte voor threads. Als een thread geheugenproblemen heeft, is de meest waarschijnlijke oorzaak een programmeerfout, zoals oneindige recursie.

Important

Vanaf het .NET Framework 4 kan alleen volledig vertrouwde code maxStackSize instellen op een waarde die groter is dan de standaardstackgrootte (1 megabyte). Als er een grotere waarde wordt opgegeven voor maxStackSize wanneer code wordt uitgevoerd met gedeeltelijke vertrouwensrelatie, maxStackSize wordt genegeerd en wordt de standaardstackgrootte gebruikt. Er wordt geen uitzondering opgeworpen. Code op elk vertrouwensniveau kan worden ingesteld maxStackSize op een waarde die kleiner is dan de standaardstackgrootte.

Note

Als u een volledig vertrouwde bibliotheek ontwikkelt die wordt gebruikt door gedeeltelijk vertrouwde code en u een thread moet starten waarvoor een grote stack is vereist, moet u de volledige vertrouwensrelatie bevestigen voordat u de thread maakt of de standaardstackgrootte wordt gebruikt. Doe dit alleen als u de code die op de thread wordt uitgevoerd volledig beheert.

Als maxStackSize deze kleiner is dan de minimale stackgrootte, wordt de minimale stackgrootte gebruikt. Als maxStackSize dit geen veelvoud van het paginaformaat is, wordt dit afgerond op het volgende grotere veelvoud van het paginaformaat.

Note

Op versies van Microsoft Windows vóór Windows XP en Windows Server 2003 wordt maxStackSize genegeerd en wordt de stapelgrootte gebruikt die is opgegeven in de uitvoerbare header.

Als u een zeer kleine stackgrootte opgeeft, moet u stack-overflow-testen mogelijk uitschakelen. Wanneer de stack ernstig wordt beperkt, kan het testen zelf een stack-overloop veroorzaken. Als u stack overflow-testen wilt uitschakelen, voegt u het volgende toe aan uw toepassingsconfiguratiebestand in een .NET Framework-app.

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

Van toepassing op

Thread(ThreadStart, Int32)

Initialiseert een nieuw exemplaar van de Thread klasse, waarbij de maximale stackgrootte voor de thread wordt opgegeven.

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)

Parameters

start
ThreadStart

Een ThreadStart gemachtigde die de methoden vertegenwoordigt die moeten worden aangeroepen wanneer deze thread wordt uitgevoerd.

maxStackSize
Int32

De maximale stackgrootte, in bytes, die door de thread moet worden gebruikt of 0 om de standaard maximale stackgrootte te gebruiken die is opgegeven in de header voor het uitvoerbare bestand.

Belangrijk Voor gedeeltelijk vertrouwde code maxStackSize wordt genegeerd als deze groter is dan de standaardstackgrootte. Er wordt geen uitzondering opgeworpen.

Uitzonderingen

start is null.

maxStackSize is kleiner dan nul.

Opmerkingen

Vermijd het gebruik van deze constructoroverbelasting. De standaardstackgrootte die door de Thread(ThreadStart) constructoroverbelasting wordt gebruikt, is de aanbevolen stackgrootte voor threads. Als een thread geheugenproblemen heeft, is de meest waarschijnlijke oorzaak een programmeerfout, zoals oneindige recursie.

Important

Vanaf het .NET Framework 4 kan alleen volledig vertrouwde code maxStackSize instellen op een waarde die groter is dan de standaardstackgrootte (1 megabyte). Als er een grotere waarde wordt opgegeven voor maxStackSize wanneer code wordt uitgevoerd met gedeeltelijke vertrouwensrelatie, maxStackSize wordt genegeerd en wordt de standaardstackgrootte gebruikt. Er wordt geen uitzondering opgeworpen. Code op elk vertrouwensniveau kan worden ingesteld maxStackSize op een waarde die kleiner is dan de standaardstackgrootte.

Note

Als u een volledig vertrouwde bibliotheek ontwikkelt die wordt gebruikt door gedeeltelijk vertrouwde code en u een thread moet starten waarvoor een grote stack is vereist, moet u de volledige vertrouwensrelatie bevestigen voordat u de thread maakt of de standaardstackgrootte wordt gebruikt. Doe dit alleen als u de code die op de thread wordt uitgevoerd volledig beheert.

Als maxStackSize deze kleiner is dan de minimale stackgrootte, wordt de minimale stackgrootte gebruikt. Als maxStackSize dit geen veelvoud van het paginaformaat is, wordt dit afgerond op het volgende grotere veelvoud van het paginaformaat. Als u bijvoorbeeld de .NET Framework-versie 2.0 op Windows Vista gebruikt, is 256 KB (262.144 bytes) de minimale stackgrootte en is de paginagrootte 64 kB (65.536 bytes).

Note

Op versies van Microsoft Windows vóór Windows XP en Windows Server 2003 wordt maxStackSize genegeerd en wordt de stapelgrootte gebruikt die is opgegeven in de uitvoerbare header.

Als u een zeer kleine stackgrootte opgeeft, moet u stack-overflow-testen mogelijk uitschakelen. Wanneer de stack ernstig wordt beperkt, kan het testen zelf een stack-overloop veroorzaken. Als u stack overflow-testen wilt uitschakelen, voegt u het volgende toe aan uw toepassingsconfiguratiebestand in een .NET Framework-app.

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

Van toepassing op