ParameterizedThreadStart Delegar

Definição

Representa o método que é executado em um Thread.

public delegate void ParameterizedThreadStart(System::Object ^ obj);
[System.Runtime.InteropServices.ComVisible(false)]
public delegate void ParameterizedThreadStart(object obj);
public delegate void ParameterizedThreadStart(object obj);
[<System.Runtime.InteropServices.ComVisible(false)>]
type ParameterizedThreadStart = delegate of obj -> unit
type ParameterizedThreadStart = delegate of obj -> unit
Public Delegate Sub ParameterizedThreadStart(obj As Object)

Parâmetros

obj
Object

Um objeto que contém dados para o procedimento de thread.

Atributos

Exemplos

O exemplo de código a seguir usa um ParameterizedThreadStart delegado para executar um método estático e um método de instância. O primeiro ParameterizedThreadStart delegado é representado pelo método estático DoWork e o segundo é representado pelo método de instância DoMoreWork . Ambos os métodos correspondem à ParameterizedThreadStart assinatura delegada; ou seja, eles têm um único parâmetro de tipo Object e não retornam um valor.

Note

Os compiladores Visual Basic e C# inferem o delegado ParameterizedThreadStart das assinaturas dos métodos DoWork e DoMoreWork e chamam o construtor correto. Portanto, não há nenhuma chamada de construtor explícita no código.

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

Comentários

Quando um thread gerenciado é criado, o método executado no thread é representado por:

O thread não começa a ser executado até que o Thread.Start método seja chamado. O ThreadStart delegado ou o ParameterizedThreadStart delegado é invocado no thread e a execução começa na primeira linha do método representado pelo delegado. No caso do ParameterizedThreadStart delegado, o objeto que é passado para o Start(Object) método é passado para o delegado.

Note

os usuários Visual Basic e C# podem omitir o construtor delegado ThreadStart ou ParameterizedThreadStart ao criar um thread. Em Visual Basic, use o operador AddressOf ao passar seu método para o construtor Thread; por exemplo, Dim t As New Thread(AddressOf ThreadProc). Em C#, basta especificar o nome do procedimento de thread. O compilador seleciona o construtor delegado correto.

Note

Quando você cria um ParameterizedThreadStart delegado para um método de instância no C++, o primeiro parâmetro do construtor é a variável de instância. Para um método estático, o primeiro parâmetro do construtor é zero. Para um método estático, o construtor delegado requer apenas um parâmetro: o endereço do método de retorno de chamada, qualificado pelo nome da classe.

O ParameterizedThreadStart delegado e a sobrecarga do Thread.Start(Object) método facilitam a passagem de dados para um procedimento de thread, mas essa técnica não é tipo segura porque qualquer objeto pode ser passado para Thread.Start(Object). Uma maneira mais robusta de passar dados para um procedimento de thread é colocar o procedimento de thread e os campos de dados em um objeto de trabalho. Para obter mais informações, consulte Criando threads e passando dados na hora de início.

O ParameterizedThreadStart delegado dá suporte apenas a um único parâmetro. Você pode passar vários itens de dados para o ParameterizedThreadStart , tornando esse parâmetro um dos seguintes:

Métodos de Extensão

Nome Description
GetMethodInfo(Delegate)

Obtém um objeto que representa o método representado pelo delegado especificado.

Aplica-se a

Confira também