ParameterizedThreadStart 委托

定义

表示在 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)

参数

obj
Object

包含线程过程的数据的对象。

属性

示例

下面的代码示例使用 ParameterizedThreadStart 委托来执行静态方法和实例方法。 第一个 ParameterizedThreadStart 委托由静态 DoWork 方法表示,第二个委托由实例 DoMoreWork 方法表示。 这两种方法都与委托签名匹配 ParameterizedThreadStart ;也就是说,它们具有一个类型 Object 且不返回值的参数。

备注

Visual Basic和 C# 编译器从方法DoMoreWorkDoWork签名推断ParameterizedThreadStart委托,并调用正确的构造函数。 因此,代码中没有显式构造函数调用。

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

注解

创建托管线程时,在线程上执行的方法由:

在调用该方法之前, Thread.Start 线程不会开始执行。 在 ThreadStart 线程上调用或 ParameterizedThreadStart 委托,执行从委托表示的方法的第一行开始。 对于 ParameterizedThreadStart 委托,传递给方法的对象 Start(Object) 将传递给委托。

备注

创建线程时,Visual Basic和 C# 用户可以省略ThreadStartParameterizedThreadStart委托构造函数。 在Visual Basic中,将方法Thread传递给构造函数时,请使用AddressOf运算符;例如。 Dim t As New Thread(AddressOf ThreadProc) 在 C# 中,只需指定线程过程的名称。 编译器选择正确的委托构造函数。

备注

在 C++ 中为实例方法创建 ParameterizedThreadStart 委托时,构造函数的第一个参数是实例变量。 对于静态方法,构造函数的第一个参数为零。 对于静态方法,委托构造函数只需要一个参数:由类名限定的回调方法的地址。

委托 ParameterizedThreadStartThread.Start(Object) 方法重载使将数据轻松传递到线程过程,但此方法不是安全的,因为可以传递给 Thread.Start(Object)任何对象。 将数据传递到线程过程的更可靠方法是将线程过程和数据字段都放入辅助角色对象。 有关详细信息,请参阅 在开始时间创建线程和传递数据

委托 ParameterizedThreadStart 仅支持单个参数。 可以通过将以下参数之一传递给多个数据项 ParameterizedThreadStart

扩展方法

GetMethodInfo(Delegate)

获取指示指定委托表示的方法的对象。

适用于

另请参阅