ParameterizedThreadStart Delegasikan

Definisi

Mewakili metode yang dijalankan pada Thread.

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

Parameter

obj
Object

Objek yang berisi data untuk prosedur utas.

Atribut

Contoh

Contoh kode berikut menggunakan ParameterizedThreadStart delegasi untuk menjalankan metode statis dan metode instans. Delegasi pertama ParameterizedThreadStart diwakili oleh metode statis DoWork dan yang kedua diwakili oleh metode instans DoMoreWork . Kedua metode cocok dengan ParameterizedThreadStart tanda tangan delegasi; yaitu, mereka memiliki satu parameter jenis Object dan tidak mengembalikan nilai.

Note

Pengkompilasi Visual Basic dan C# menyimpulkan delegasi ParameterizedThreadStart dari tanda tangan metode DoWork dan DoMoreWork, dan memanggil konstruktor yang benar. Dengan demikian, tidak ada panggilan konstruktor eksplisit dalam kode.

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

Keterangan

Ketika utas terkelola dibuat, metode yang dijalankan pada utas diwakili oleh:

Utas tidak mulai dieksekusi sampai metode dipanggil Thread.Start . Atau ThreadStartParameterizedThreadStart delegasi dipanggil pada utas, dan eksekusi dimulai pada baris pertama metode yang diwakili oleh delegasi. Dalam kasus ParameterizedThreadStart delegasi, objek yang diteruskan ke Start(Object) metode diteruskan ke delegasi.

Note

pengguna Visual Basic dan C# dapat menghilangkan ThreadStart atau ParameterizedThreadStart mendelegasikan konstruktor saat membuat utas. Di Visual Basic, gunakan operator AddressOf saat meneruskan metode Anda ke konstruktor Thread; misalnya, Dim t As New Thread(AddressOf ThreadProc). Di C#, cukup tentukan nama prosedur utas. Pengkompilasi memilih konstruktor delegasi yang benar.

Note

Saat Anda membuat ParameterizedThreadStart delegasi untuk metode instans di C++, parameter pertama konstruktor adalah variabel instans. Untuk metode statis, parameter pertama konstruktor adalah nol. Untuk metode statis, konstruktor delegasi hanya memerlukan satu parameter: alamat metode panggilan balik, yang memenuhi syarat dengan nama kelas.

Delegasi ParameterizedThreadStart dan Thread.Start(Object) metode kelebihan beban memudahkan untuk meneruskan data ke prosedur utas, tetapi teknik ini tidak aman karena objek apa pun dapat diteruskan ke Thread.Start(Object). Cara yang lebih kuat untuk meneruskan data ke prosedur utas adalah dengan menempatkan prosedur utas dan bidang data ke dalam objek pekerja. Untuk informasi selengkapnya, lihat Membuat Utas dan Meneruskan Data pada Waktu Mulai.

Delegasi ParameterizedThreadStart hanya mendukung satu parameter. Anda dapat meneruskan beberapa item data ke ParameterizedThreadStart dengan menjadikan parameter tersebut sebagai salah satu dari berikut ini:

Metode Ekstensi

Nama Deskripsi
GetMethodInfo(Delegate)

Mendapatkan objek yang mewakili metode yang diwakili oleh delegasi yang ditentukan.

Berlaku untuk

Lihat juga