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.'
備註
建立 Managed 執行緒時,線上程上執行的方法會以下列方式表示:
ThreadStart傳遞至建構函式的 Thread.Thread(ThreadStart) 委派。 任何沒有參數且在 C# 中傳
void
回或Sub
為程式的方法,Visual Basic都可以代表委派。ParameterizedThreadStart傳遞至建構函式的 Thread.Thread(ParameterizedThreadStart) 委派。 任何類型為 Object 且傳回 void 且在 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) |
取得表示特定委派所代表之方法的物件。 |