ParameterizedThreadStart 代理人
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
Threadで実行されるメソッドを表します。
public delegate void ParameterizedThreadStart(System::Object ^ obj);
[System.Runtime.InteropServices.ComVisible(false)]
public delegate void ParameterizedThreadStart(object obj);
public delegate void ParameterizedThreadStart(object obj);
[<System.Runtime.InteropServices.ComVisible(false)>]
type ParameterizedThreadStart = delegate of obj -> unit
type ParameterizedThreadStart = delegate of obj -> unit
Public Delegate Sub ParameterizedThreadStart(obj As Object)
パラメーター
- obj
- Object
スレッド プロシージャのデータを含むオブジェクト。
- 属性
例
次のコード例では、 ParameterizedThreadStart デリゲートを使用して静的メソッドとインスタンス メソッドを実行します。 最初の ParameterizedThreadStart デリゲートは静的 DoWork メソッドによって表され、2 番目のデリゲートはインスタンス DoMoreWork メソッドによって表されます。 どちらのメソッドも ParameterizedThreadStart デリゲート シグネチャと一致します。つまり、 Object 型の単一のパラメーターを持ち、値を返しません。
Note
Visual Basicおよび C# コンパイラは、DoWork および DoMoreWork メソッドのシグネチャから ParameterizedThreadStart デリゲートを推論し、正しいコンストラクターを呼び出します。 したがって、コード内に明示的なコンストラクター呼び出しはありません。
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.Thread(ThreadStart) コンストラクターに渡されるThreadStart デリゲート。 パラメーターがなく、C# で
voidを返すメソッド、またはデリゲートを表すことができるVisual BasicのSubプロシージャであるメソッド。Thread.Thread(ParameterizedThreadStart) コンストラクターに渡されるParameterizedThreadStart デリゲート。 Object 型の 1 つのパラメーターを持ち、C# で void を返すメソッド、またはデリゲートを表すことができるVisual Basicの Sub プロシージャであるメソッド。
スレッドは、 Thread.Start メソッドが呼び出されるまで実行を開始しません。 ThreadStartまたはParameterizedThreadStartデリゲートがスレッドで呼び出され、デリゲートによって表されるメソッドの最初の行から実行が開始されます。 ParameterizedThreadStart デリゲートの場合、Start(Object) メソッドに渡されるオブジェクトがデリゲートに渡されます。
Note
Visual Basicおよび C# ユーザーは、スレッドの作成時に ThreadStart または ParameterizedThreadStart デリゲート コンストラクターを省略できます。 Visual Basicでは、メソッドを Thread コンストラクター (例: Dim t As New Thread(AddressOf ThreadProc)) に渡すときに、AddressOf 演算子を使用します。 C# では、スレッド プロシージャの名前を指定するだけです。 コンパイラは、適切なデリゲート コンストラクターを選択します。
Note
C++ でインスタンス メソッドの ParameterizedThreadStart デリゲートを作成する場合、コンストラクターの最初のパラメーターはインスタンス変数です。 静的メソッドの場合、コンストラクターの最初のパラメーターは 0 です。 静的メソッドの場合、デリゲート コンストラクターに必要なパラメーターは 1 つだけです。コールバック メソッドのアドレスは、クラス名で修飾されます。
ParameterizedThreadStart デリゲートとThread.Start(Object) メソッドのオーバーロードを使用すると、スレッド プロシージャにデータを簡単に渡すことができますが、この手法は、任意のオブジェクトをThread.Start(Object)に渡すことができるため、型セーフではありません。 スレッド プロシージャにデータを渡すより堅牢な方法は、スレッド プロシージャとデータ フィールドの両方をワーカー オブジェクトに配置することです。 詳細については、「 スレッドの作成と開始時刻のデータの受け渡し」を参照してください。
ParameterizedThreadStart デリゲートは、1 つのパラメーターのみをサポートします。 複数のデータ項目を ParameterizedThreadStart に渡すには、そのパラメーターを次のいずれかを指定します。
- 配列を返します。
- すべてのデータ項目が同じ型の場合は、コレクション型。
- Tuple<T1,T2>やTuple<T1,T2,T3,T4>などのタプル型。
拡張メソッド
| 名前 | 説明 |
|---|---|
| GetMethodInfo(Delegate) |
指定したデリゲートによって表されるメソッドを表すオブジェクトを取得します。 |