ParameterizedThreadStart 代理人

定義

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)

指定したデリゲートによって表されるメソッドを表すオブジェクトを取得します。

適用対象

こちらもご覧ください