Thread.Start Metoda

Definicja

Powoduje zaplanowanie wykonania wątku.

Przeciążenia

Nazwa Opis
Start()

Powoduje, że system operacyjny zmienia stan bieżącego wystąpienia na Running.

Start(Object)

Powoduje, że system operacyjny zmienia stan bieżącego wystąpienia na Running, a opcjonalnie dostarcza obiekt zawierający dane, które mają być używane przez metodę wykonywaną przez wątek.

Start()

Źródło:
Thread.cs
Źródło:
Thread.cs
Źródło:
Thread.cs
Źródło:
Thread.cs
Źródło:
Thread.cs

Powoduje, że system operacyjny zmienia stan bieżącego wystąpienia na 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 ()
Atrybuty

Wyjątki

Wątek został już uruchomiony.

Za mało pamięci, aby uruchomić ten wątek.

Przykłady

Poniższy przykład tworzy i uruchamia wątek.

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...

Uwagi

Gdy wątek znajduje się w ThreadState.Running stanie, system operacyjny może zaplanować jego wykonanie. Wątek rozpoczyna wykonywanie w pierwszym wierszu metody reprezentowanej przez ThreadStart delegata dostarczonego ParameterizedThreadStart do konstruktora wątku. Należy pamiętać, że wywołanie metody nie Start blokuje wątku wywołującego.

Note

Jeśli to przeciążenie jest używane z wątkiem utworzonym przy użyciu delegata ParameterizedThreadStart , null jest przekazywane do metody wykonywanej przez wątek.

Po zakończeniu wątku nie można go ponownie uruchomić za pomocą innego wywołania metody Start.

Zobacz też

Dotyczy

Start(Object)

Źródło:
Thread.cs
Źródło:
Thread.cs
Źródło:
Thread.cs
Źródło:
Thread.cs
Źródło:
Thread.cs

Powoduje, że system operacyjny zmienia stan bieżącego wystąpienia na Running, a opcjonalnie dostarcza obiekt zawierający dane, które mają być używane przez metodę wykonywaną przez wątek.

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)

Parametry

parameter
Object

Obiekt zawierający dane, które mają być używane przez metodę wykonywaną przez wątek.

Atrybuty

Wyjątki

Wątek został już uruchomiony.

Za mało pamięci, aby uruchomić ten wątek.

Ten wątek został utworzony przy użyciu delegata ThreadStart zamiast delegata ParameterizedThreadStart .

Przykłady

Poniższy przykład tworzy delegata ParameterizedThreadStart z metodą statyczną i metodą wystąpienia.

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.'

Uwagi

Gdy wątek znajduje się w ThreadState.Running stanie, system operacyjny może zaplanować jego wykonanie. Wątek rozpoczyna wykonywanie w pierwszym wierszu metody reprezentowanej przez ThreadStart delegata dostarczonego ParameterizedThreadStart do konstruktora wątku. Należy pamiętać, że wywołanie metody nie Start blokuje wątku wywołującego.

Po zakończeniu wątku nie można go ponownie uruchomić za pomocą innego wywołania metody Start.

To przeciążenie i ParameterizedThreadStart delegat ułatwiają przekazywanie danych do procedury wątku, ale technika nie jest bezpieczna, ponieważ do tego przeciążenia można przekazać dowolny obiekt. Bardziej niezawodnym sposobem przekazywania danych do procedury wątku jest umieszczenie zarówno procedury wątku, jak i pól danych w obiekcie procesu roboczego. Aby uzyskać więcej informacji, zobacz Tworzenie wątków i przekazywanie danych w czasie rozpoczęcia.

Zobacz też

Dotyczy