ParameterizedThreadStart Delegasikan
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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:
ThreadStart Delegasi yang diteruskan ke Thread.Thread(ThreadStart) konstruktor. Metode apa pun yang tidak memiliki parameter dan yang mengembalikan
voiddi C# atau merupakan prosedurSubdi Visual Basic dapat mewakili delegasi.ParameterizedThreadStart Delegasi yang diteruskan ke Thread.Thread(ParameterizedThreadStart) konstruktor. Metode apa pun yang memiliki parameter tunggal jenis Object dan yang mengembalikan kekosongan di C# atau merupakan Sub prosedur di Visual Basic dapat mewakili delegasi.
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:
- Array.
- Jenis koleksi, jika semua item data memiliki jenis yang sama.
- Jenis tuple, seperti Tuple<T1,T2> atau Tuple<T1,T2,T3,T4>.
Metode Ekstensi
| Nama | Deskripsi |
|---|---|
| GetMethodInfo(Delegate) |
Mendapatkan objek yang mewakili metode yang diwakili oleh delegasi yang ditentukan. |