ParameterizedThreadStart Temsilci

Tanım

üzerinde Threadyürütülen yöntemi temsil eder.

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)

Parametreler

obj
Object

İş parçacığı yordamı için veri içeren bir nesne.

Öznitelikler

Örnekler

Aşağıdaki kod örneği, statik bir ParameterizedThreadStart yöntem ve örnek yöntemi yürütmek için bir temsilci kullanır. İlk ParameterizedThreadStart temsilci statik DoWork yöntemle, ikincisi örnek DoMoreWork yöntemiyle temsil edilir. Her iki yöntem de temsilci imzası ile ParameterizedThreadStart eşleşmektedir; başka bir ifadeyle, türünde Object tek bir parametreye sahiptir ve bir değer döndürmez.

Not

Visual Basic ve C# derleyicileri, ve DoMoreWork yöntemlerinin ParameterizedThreadStart imzalarından temsilciyi DoWork çıkarsar ve doğru oluşturucuyu çağırır. Bu nedenle kodda açık oluşturucu çağrısı yoktur.

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

Açıklamalar

Yönetilen bir iş parçacığı oluşturulduğunda, iş parçacığında yürütülen yöntem şu şekilde temsil edilir:

yöntemi çağrılana Thread.Start kadar iş parçacığı yürütülmeye başlamaz. veya ThreadStart ParameterizedThreadStart temsilcisi iş parçacığında çağrılır ve yürütme, temsilci tarafından temsil edilen yöntemin ilk satırında başlar. Temsilci söz konusu ParameterizedThreadStart olduğunda, yöntemine Start(Object) geçirilen nesne temsilciye geçirilir.

Not

Visual Basic ve C# kullanıcıları iş parçacığı oluştururken veya ParameterizedThreadStart temsilci oluşturucuyu ThreadStart atlayabilir. Visual Basic'da, yönteminizi oluşturucuya Thread geçirirken işlecini kullanınAddressOf; örneğin, Dim t As New Thread(AddressOf ThreadProc). C# dilinde iş parçacığı yordamının adını belirtmeniz yeterlidir. Derleyici doğru temsilci oluşturucuyu seçer.

Not

C++ dilinde bir örnek yöntemi için temsilci oluşturduğunuzda ParameterizedThreadStart , oluşturucunun ilk parametresi örnek değişkenidir. Statik bir yöntem için oluşturucunun ilk parametresi sıfırdır. Statik bir yöntem için temsilci oluşturucu tek bir parametre gerektirir: sınıf adıyla nitelenen geri çağırma yönteminin adresi.

Temsilci ParameterizedThreadStart ve Thread.Start(Object) yöntem aşırı yüklemesi, bir iş parçacığı yordamına veri geçirmeyi kolaylaştırır, ancak bu teknik türü güvenli değildir çünkü herhangi bir nesne öğesine Thread.Start(Object)geçirilebilir. Bir iş parçacığı yordamına veri geçirmenin daha sağlam bir yolu, hem iş parçacığı yordamını hem de veri alanlarını bir çalışan nesnesine yerleştirmektir. Daha fazla bilgi için bkz. Başlangıç Zamanında İş Parçacığı Oluşturma ve Veri Geçirme.

Temsilci ParameterizedThreadStart yalnızca tek bir parametreyi destekler. Bu parametreyi ParameterizedThreadStart aşağıdakilerden biri yaparak öğesine birden çok veri öğesi geçirebilirsiniz:

Uzantı Metotları

GetMethodInfo(Delegate)

Belirtilen temsilci tarafından temsil edilen yöntemi temsil eden bir nesnesi alır.

Şunlara uygulanır

Ayrıca bkz.