ParameterizedThreadStart 委托
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
表示在 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# 编译器从方法DoMoreWork
的DoWork
签名推断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.'
注解
创建托管线程时,在线程上执行的方法由:
ThreadStart传递给构造函数的Thread.Thread(ThreadStart)委托。 任何没有参数且在 C# 中返回
void
或Visual BasicSub
中的过程都可以表示委托。ParameterizedThreadStart传递给构造函数的Thread.Thread(ParameterizedThreadStart)委托。 任何具有类型Object且返回 C# 中的 void 或Visual Basic中的 Sub 过程都可以表示委托的任何方法。
在调用该方法之前, Thread.Start 线程不会开始执行。 在 ThreadStart 线程上调用或 ParameterizedThreadStart 委托,执行从委托表示的方法的第一行开始。 对于 ParameterizedThreadStart 委托,传递给方法的对象 Start(Object) 将传递给委托。
备注
创建线程时,Visual Basic和 C# 用户可以省略ThreadStart或ParameterizedThreadStart委托构造函数。 在Visual Basic中,将方法Thread传递给构造函数时,请使用AddressOf
运算符;例如。 Dim t As New Thread(AddressOf ThreadProc)
在 C# 中,只需指定线程过程的名称。 编译器选择正确的委托构造函数。
备注
在 C++ 中为实例方法创建 ParameterizedThreadStart 委托时,构造函数的第一个参数是实例变量。 对于静态方法,构造函数的第一个参数为零。 对于静态方法,委托构造函数只需要一个参数:由类名限定的回调方法的地址。
委托 ParameterizedThreadStart 和 Thread.Start(Object) 方法重载使将数据轻松传递到线程过程,但此方法不是安全的,因为可以传递给 Thread.Start(Object)任何对象。 将数据传递到线程过程的更可靠方法是将线程过程和数据字段都放入辅助角色对象。 有关详细信息,请参阅 在开始时间创建线程和传递数据。
委托 ParameterizedThreadStart 仅支持单个参数。 可以通过将以下参数之一传递给多个数据项 ParameterizedThreadStart :
一个数组。
集合类型(如果所有数据项都属于同一类型)。
元组类型,例如 Tuple<T1,T2> 或 Tuple<T1,T2,T3,T4>。
扩展方法
GetMethodInfo(Delegate) |
获取指示指定委托表示的方法的对象。 |