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
メソッドで表され、2 番目のデリゲートはインスタンス DoMoreWork
メソッドによって表されます。 どちらのメソッドもデリゲート シグネチャと ParameterizedThreadStart 一致します。つまり、型 Object のパラメーターが 1 つあり、値を返しません。
Note
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 Basic のプロシージャであるメソッドはSub
、デリゲートを表すことができます。ParameterizedThreadStartコンストラクターに渡されるThread.Thread(ParameterizedThreadStart)デリゲート。 型 Object のパラメーターが 1 つあり、C# で void を返すメソッド、または Visual Basic の Sub プロシージャであるメソッドは、デリゲートを表すことができます。
メソッドが呼び出されるまで、スレッドの Thread.Start 実行は開始されません。 ThreadStartまたは ParameterizedThreadStart デリゲートがスレッドで呼び出され、デリゲートによって表されるメソッドの最初の行から実行が開始されます。 デリゲートの ParameterizedThreadStart 場合、メソッドに渡される Start(Object) オブジェクトがデリゲートに渡されます。
Note
Visual Basic と C# のユーザーは、スレッドの作成時に ThreadStart または ParameterizedThreadStart デリゲート コンストラクターを省略できます。 Visual Basic では、 メソッドを AddressOf
コンストラクターに渡すときに 演算子を Thread 使用します (例: Dim t As New Thread(AddressOf ThreadProc)
)。 C# では、スレッド プロシージャの名前を指定するだけです。 コンパイラは、適切なデリゲート コンストラクターを選択します。
Note
C++ でインスタンス メソッドのデリゲートを作成 ParameterizedThreadStart する場合、コンストラクターの最初のパラメーターはインスタンス変数です。 静的メソッドの場合、コンストラクターの最初のパラメーターは 0 です。 静的メソッドの場合、デリゲート コンストラクターに必要なパラメーターは 1 つだけです。コールバック メソッドのアドレスは、クラス名で修飾されます。
ParameterizedThreadStartデリゲートとメソッドのThread.Start(Object)オーバーロードを使用すると、スレッド プロシージャにデータを簡単に渡すことができますが、この手法は型セーフではありません。これは、オブジェクトを にThread.Start(Object)渡すことができるためです。 スレッド プロシージャにデータを渡すより堅牢な方法は、スレッド プロシージャとデータ フィールドの両方をワーカー オブジェクトに配置することです。 詳細については、「 スレッドの作成」および「開始時刻にデータを渡す」を参照してください。
デリゲートは ParameterizedThreadStart 、1 つのパラメーターのみをサポートします。 複数のデータ項目を に渡すには、 ParameterizedThreadStart そのパラメーターを次のいずれかを指定します。
配列。
すべてのデータ項目が同じ型である場合は、コレクション型。
や Tuple<T1,T2,T3,T4>などのTuple<T1,T2>タプル型。
拡張メソッド
GetMethodInfo(Delegate) |
指定したデリゲートによって表されるメソッドを表すオブジェクトを取得します。 |
適用対象
こちらもご覧ください
.NET