Thread.Start メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
スレッドを実行するようにスケジュールします。
オーバーロード
| 名前 | 説明 |
|---|---|
| Start() |
オペレーティング システムが現在のインスタンスの状態を Runningに変更します。 |
| Start(Object) |
オペレーティング システムが現在のインスタンスの状態を Runningに変更し、必要に応じて、スレッドが実行するメソッドで使用されるデータを含むオブジェクトを提供します。 |
Start()
- ソース:
- Thread.cs
- ソース:
- Thread.cs
- ソース:
- Thread.cs
- ソース:
- Thread.cs
- ソース:
- Thread.cs
オペレーティング システムが現在のインスタンスの状態を Runningに変更します。
public:
void Start();
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public void Start();
public void Start();
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
member this.Start : unit -> unit
member this.Start : unit -> unit
Public Sub Start ()
- 属性
例外
スレッドは既に開始されています。
このスレッドを開始するのに十分なメモリがありません。
例
次の例では、スレッドを作成して開始します。
using System;
using System.Threading;
public class ThreadWork
{
public static void DoWork()
{
for(int i = 0; i<3;i++) {
Console.WriteLine("Working thread...");
Thread.Sleep(100);
}
}
}
class ThreadTest
{
public static void Main()
{
Thread thread1 = new Thread(ThreadWork.DoWork);
thread1.Start();
for (int i = 0; i<3; i++) {
Console.WriteLine("In main.");
Thread.Sleep(100);
}
}
}
// The example displays output like the following:
// In main.
// Working thread...
// In main.
// Working thread...
// In main.
// Working thread...
open System.Threading
module ThreadWork =
let doWork () =
for _ = 0 to 2 do
printfn "Working thread..."
Thread.Sleep 100
let thread1 = Thread ThreadWork.doWork
thread1.Start()
for _ = 0 to 2 do
printfn "In main."
Thread.Sleep 100
// The example displays output like the following:
// In main.
// Working thread...
// In main.
// Working thread...
// In main.
// Working thread...
Imports System.Threading
Public Class ThreadWork
Public Shared Sub DoWork()
Dim i As Integer
For i = 0 To 2
Console.WriteLine("Working thread...")
Thread.Sleep(100)
Next i
End Sub
End Class
Class ThreadTest
Public Shared Sub Main()
Dim thread1 As New Thread(AddressOf ThreadWork.DoWork)
thread1.Start()
Dim i As Integer
For i = 0 To 2
Console.WriteLine("In main.")
Thread.Sleep(100)
Next
End Sub
End Class
' The example displays output like the following:
' In main.
' Working thread...
' In main.
' Working thread...
' In main.
' Working thread...
注釈
スレッドが ThreadState.Running 状態になると、オペレーティング システムは実行のスケジュールを設定できます。 スレッドは、スレッド コンストラクターに指定された ThreadStart または ParameterizedThreadStart デリゲートによって表されるメソッドの最初の行で実行を開始します。 Startの呼び出しは呼び出し元のスレッドをブロックしないことに注意してください。
Note
このオーバーロードが、 ParameterizedThreadStart デリゲートを使用して作成されたスレッドで使用される場合、 null はスレッドによって実行されるメソッドに渡されます。
スレッドが終了すると、 Startへの別の呼び出しで再開することはできません。
こちらもご覧ください
適用対象
Start(Object)
- ソース:
- Thread.cs
- ソース:
- Thread.cs
- ソース:
- Thread.cs
- ソース:
- Thread.cs
- ソース:
- Thread.cs
オペレーティング システムが現在のインスタンスの状態を Runningに変更し、必要に応じて、スレッドが実行するメソッドで使用されるデータを含むオブジェクトを提供します。
public:
void Start(System::Object ^ parameter);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public void Start(object? parameter);
public void Start(object? parameter);
public void Start(object parameter);
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
member this.Start : obj -> unit
member this.Start : obj -> unit
Public Sub Start (parameter As Object)
パラメーター
- parameter
- Object
スレッドが実行するメソッドによって使用されるデータを含むオブジェクト。
- 属性
例外
スレッドは既に開始されています。
このスレッドを開始するのに十分なメモリがありません。
このスレッドは、ThreadStart デリゲートではなく、ParameterizedThreadStart デリゲートを使用して作成されました。
例
次の例では、静的メソッドとインスタンス メソッドを使用して 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.'
open System.Threading
type Work() =
static member DoWork(data: obj) =
printfn $"Static thread procedure. Data='{data}'"
member _.DoMoreWork(data: obj) =
printfn $"Instance thread procedure. Data='{data}'"
// Start a thread that calls a parameterized static method.
let newThread = Thread(ParameterizedThreadStart Work.DoWork)
newThread.Start 42
// Start a thread that calls a parameterized instance method.
let w = Work()
let newThread2 = Thread(ParameterizedThreadStart w.DoMoreWork)
newThread.Start "The answer."
// 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.'
注釈
スレッドが ThreadState.Running 状態になると、オペレーティング システムは実行のスケジュールを設定できます。 スレッドは、スレッド コンストラクターに指定された ThreadStart または ParameterizedThreadStart デリゲートによって表されるメソッドの最初の行で実行を開始します。 Startの呼び出しは呼び出し元のスレッドをブロックしないことに注意してください。
スレッドが終了すると、 Startへの別の呼び出しで再開することはできません。
このオーバーロードと ParameterizedThreadStart デリゲートを使用すると、データをスレッド プロシージャに簡単に渡すことができますが、このオーバーロードに渡すことができるオブジェクトが存在するため、この手法は型セーフではありません。 スレッド プロシージャにデータを渡すより堅牢な方法は、スレッド プロシージャとデータ フィールドの両方をワーカー オブジェクトに配置することです。 詳細については、「 スレッドの作成と開始時刻のデータの受け渡し」を参照してください。