Thread Třída

Definice

Vytvoří a řídí vlákno, nastaví jeho prioritu a získá jeho stav.

public ref class Thread sealed : System::Runtime::ConstrainedExecution::CriticalFinalizerObject
public ref class Thread sealed
public ref class Thread sealed : System::Runtime::InteropServices::_Thread
public ref class Thread sealed : System::Runtime::ConstrainedExecution::CriticalFinalizerObject, System::Runtime::InteropServices::_Thread
public sealed class Thread : System.Runtime.ConstrainedExecution.CriticalFinalizerObject
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class Thread
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
public sealed class Thread : System.Runtime.InteropServices._Thread
[System.Runtime.InteropServices.ComVisible(true)]
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
public sealed class Thread : System.Runtime.ConstrainedExecution.CriticalFinalizerObject, System.Runtime.InteropServices._Thread
type Thread = class
    inherit CriticalFinalizerObject
[<System.Runtime.InteropServices.ComVisible(true)>]
type Thread = class
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)>]
type Thread = class
    interface _Thread
[<System.Runtime.InteropServices.ComVisible(true)>]
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)>]
type Thread = class
    inherit CriticalFinalizerObject
    interface _Thread
Public NotInheritable Class Thread
Inherits CriticalFinalizerObject
Public NotInheritable Class Thread
Public NotInheritable Class Thread
Implements _Thread
Public NotInheritable Class Thread
Inherits CriticalFinalizerObject
Implements _Thread
Dědičnost
Dědičnost
Thread
Atributy
Implementuje

Příklady

Následující příklad ukazuje jednoduchou funkci threadingu.

using System;
using System.Threading;

// Simple threading scenario:  Start a static method running
// on a second thread.
public class ThreadExample {
    // The ThreadProc method is called when the thread starts.
    // It loops ten times, writing to the console and yielding
    // the rest of its time slice each time, and then ends.
    public static void ThreadProc() {
        for (int i = 0; i < 10; i++) {
            Console.WriteLine("ThreadProc: {0}", i);
            // Yield the rest of the time slice.
            Thread.Sleep(0);
        }
    }

    public static void Main() {
        Console.WriteLine("Main thread: Start a second thread.");
        // The constructor for the Thread class requires a ThreadStart
        // delegate that represents the method to be executed on the
        // thread.  C# simplifies the creation of this delegate.
        Thread t = new Thread(new ThreadStart(ThreadProc));

        // Start ThreadProc.  Note that on a uniprocessor, the new
        // thread does not get any processor time until the main thread
        // is preempted or yields.  Uncomment the Thread.Sleep that
        // follows t.Start() to see the difference.
        t.Start();
        //Thread.Sleep(0);

        for (int i = 0; i < 4; i++) {
            Console.WriteLine("Main thread: Do some work.");
            Thread.Sleep(0);
        }

        Console.WriteLine("Main thread: Call Join(), to wait until ThreadProc ends.");
        t.Join();
        Console.WriteLine("Main thread: ThreadProc.Join has returned.  Press Enter to end program.");
        Console.ReadLine();
    }
}
open System.Threading

// Simple threading scenario:  Start a static method running
// on a second thread.

// The ThreadProc method is called when the thread starts.
// It loops ten times, writing to the console and yielding
// the rest of its time slice each time, and then ends.
let threadProc () =
    for i = 0 to 9 do
        printfn $"ThreadProc: {i}"
        // Yield the rest of the time slice.
        Thread.Sleep 0

printfn "Main thread: Start a second thread."
// The constructor for the Thread class requires a ThreadStart
// delegate that represents the method to be executed on the
// thread. F# simplifies the creation of this delegate.
let t = Thread threadProc

// Start ThreadProc.  Note that on a uniprocessor, the new
// thread does not get any processor time until the main thread
// is preempted or yields.  Uncomment the Thread.Sleep that
// follows t.Start() to see the difference.
t.Start()
//Thread.Sleep 0

for _ = 0 to 3 do
    printfn "Main thread: Do some work."
    Thread.Sleep 0

printfn "Main thread: Call Join(), to wait until ThreadProc ends."
t.Join()
printfn "Main thread: ThreadProc.Join has returned.  Press Enter to end program."
stdin.ReadLine() |> ignore
Imports System.Threading

' Simple threading scenario:  Start a Shared method running
' on a second thread.
Public Class ThreadExample
    ' The ThreadProc method is called when the thread starts.
    ' It loops ten times, writing to the console and yielding 
    ' the rest of its time slice each time, and then ends.
    Public Shared Sub ThreadProc()
        Dim i As Integer
        For i = 0 To 9
            Console.WriteLine("ThreadProc: {0}", i)
            ' Yield the rest of the time slice.
            Thread.Sleep(0)
        Next
    End Sub

    Public Shared Sub Main()
        Console.WriteLine("Main thread: Start a second thread.")
        ' The constructor for the Thread class requires a ThreadStart 
        ' delegate.  The Visual Basic AddressOf operator creates this
        ' delegate for you.
        Dim t As New Thread(AddressOf ThreadProc)

        ' Start ThreadProc.  Note that on a uniprocessor, the new 
        ' thread does not get any processor time until the main thread 
        ' is preempted or yields.  Uncomment the Thread.Sleep that 
        ' follows t.Start() to see the difference.
        t.Start()
        'Thread.Sleep(0)

        Dim i As Integer
        For i = 1 To 4
            Console.WriteLine("Main thread: Do some work.")
            Thread.Sleep(0)
        Next

        Console.WriteLine("Main thread: Call Join(), to wait until ThreadProc ends.")
        t.Join()
        Console.WriteLine("Main thread: ThreadProc.Join has returned.  Press Enter to end program.")
        Console.ReadLine()
    End Sub
End Class

Tento kód vytvoří výstup podobný následujícímu:

[VB, C++, C#]
Main thread: Start a second thread.
Main thread: Do some work.
ThreadProc: 0
Main thread: Do some work.
ThreadProc: 1
Main thread: Do some work.
ThreadProc: 2
Main thread: Do some work.
ThreadProc: 3
Main thread: Call Join(), to wait until ThreadProc ends.
ThreadProc: 4
ThreadProc: 5
ThreadProc: 6
ThreadProc: 7
ThreadProc: 8
ThreadProc: 9
Main thread: ThreadProc.Join has returned. Press Enter to end program.

Poznámky

Třída Thread vytvoří a řídí vlákno, nastaví jeho prioritu a získá její stav.

Při spuštění procesu modul CLR (Common Language Runtime) automaticky vytvoří jedno vlákno popředí pro spuštění kódu aplikace. Spolu s tímto hlavním vláknem popředí může proces vytvořit jedno nebo více vláken pro spuštění části kódu programu přidruženého k procesu. Tato vlákna se můžou spouštět buď v popředí, nebo na pozadí. Kromě toho můžete pomocí ThreadPool třídy spustit kód na pracovních vláknech spravovaných modulem CLR (Common Language Runtime).

Spuštění vlákna

Vlákno spustíte zadáním delegáta, který představuje metodu, kterou má vlákno vykonat ve svém konstruktoru třídy. Pak zavoláte metodu Start , která zahájí provádění.

Konstruktory Thread mohou mít jeden ze dvou typů delegátů v závislosti na tom, jestli můžete předat argument metodě, která se má provést:

  • Pokud metoda nemá žádné argumenty, předáte ThreadStart delegáta do konstruktoru. Má podpis:

    public delegate void ThreadStart()
    
    Public Delegate Sub ThreadStart()
    

    Následující příklad vytvoří a spustí vlákno, které spustí metodu ExecuteInForeground . Metoda zobrazí informace o některých vlastnostech vlákna a pak spustí smyčku, ve které se pozastaví půl sekundy a zobrazí uplynulý počet sekund. Když vlákno běží nejméně pět sekund, smyčka skončí a vlákno ukončí své vykonávání.

    using System;
    using System.Diagnostics;
    using System.Threading;
    
    public class Example
    {
       public static void Main()
       {
          var th = new Thread(ExecuteInForeground);
          th.Start();
          Thread.Sleep(1000);
          Console.WriteLine("Main thread ({0}) exiting...",
                            Thread.CurrentThread.ManagedThreadId);
       }
    
       private static void ExecuteInForeground()
       {
          var sw = Stopwatch.StartNew();
          Console.WriteLine("Thread {0}: {1}, Priority {2}",
                            Thread.CurrentThread.ManagedThreadId,
                            Thread.CurrentThread.ThreadState,
                            Thread.CurrentThread.Priority);
          do {
             Console.WriteLine("Thread {0}: Elapsed {1:N2} seconds",
                               Thread.CurrentThread.ManagedThreadId,
                               sw.ElapsedMilliseconds / 1000.0);
             Thread.Sleep(500);
          } while (sw.ElapsedMilliseconds <= 5000);
          sw.Stop();
       }
    }
    // The example displays output like the following:
    //       Thread 3: Running, Priority Normal
    //       Thread 3: Elapsed 0.00 seconds
    //       Thread 3: Elapsed 0.51 seconds
    //       Main thread (1) exiting...
    //       Thread 3: Elapsed 1.02 seconds
    //       Thread 3: Elapsed 1.53 seconds
    //       Thread 3: Elapsed 2.05 seconds
    //       Thread 3: Elapsed 2.55 seconds
    //       Thread 3: Elapsed 3.07 seconds
    //       Thread 3: Elapsed 3.57 seconds
    //       Thread 3: Elapsed 4.07 seconds
    //       Thread 3: Elapsed 4.58 seconds
    
    open System.Diagnostics
    open System.Threading
    
    let executeInForeground () =
        let sw = Stopwatch.StartNew()
    
        printfn $"Thread {Thread.CurrentThread.ManagedThreadId}: {Thread.CurrentThread.ThreadState}, Priority {Thread.CurrentThread.Priority}"
    
        while sw.ElapsedMilliseconds <= 5000 do
            printfn $"Thread {Thread.CurrentThread.ManagedThreadId}: Elapsed {sw.ElapsedMilliseconds / 1000L:N2} seconds"
            Thread.Sleep 500
    
        sw.Stop()
    
    let th = Thread executeInForeground
    th.Start()
    Thread.Sleep 1000
    printfn $"Main thread ({Thread.CurrentThread.ManagedThreadId}) exiting..."
    
    // The example displays output like the following:
    //       Thread 3: Running, Priority Normal
    //       Thread 3: Elapsed 0.00 seconds
    //       Thread 3: Elapsed 0.51 seconds
    //       Main thread (1) exiting...
    //       Thread 3: Elapsed 1.02 seconds
    //       Thread 3: Elapsed 1.53 seconds
    //       Thread 3: Elapsed 2.05 seconds
    //       Thread 3: Elapsed 2.55 seconds
    //       Thread 3: Elapsed 3.07 seconds
    //       Thread 3: Elapsed 3.57 seconds
    //       Thread 3: Elapsed 4.07 seconds
    //       Thread 3: Elapsed 4.58 seconds
    
    Imports System.Diagnostics
    Imports System.Threading
    
    Module Example3
        Public Sub Main()
            Dim th As New Thread(AddressOf ExecuteInForeground)
            th.Start()
            Thread.Sleep(1000)
            Console.WriteLine("Main thread ({0}) exiting...", Thread.CurrentThread.ManagedThreadId)
        End Sub
    
        Private Sub ExecuteInForeground()
            Dim start As DateTime = DateTime.Now
            Dim sw As Stopwatch = Stopwatch.StartNew()
            Console.WriteLine("Thread {0}: {1}, Priority {2}",
                            Thread.CurrentThread.ManagedThreadId,
                            Thread.CurrentThread.ThreadState,
                            Thread.CurrentThread.Priority)
            Do
                Console.WriteLine("Thread {0}: Elapsed {1:N2} seconds",
                               Thread.CurrentThread.ManagedThreadId,
                               sw.ElapsedMilliseconds / 1000)
                Thread.Sleep(500)
            Loop While sw.ElapsedMilliseconds <= 5000
            sw.Stop()
        End Sub
    End Module
    ' The example displays output like the following:
    '       Thread 3: Running, Priority Normal
    '       Thread 3: Elapsed 0.00 seconds
    '       Thread 3: Elapsed 0.51 seconds
    '       Main thread (1) exiting...
    '       Thread 3: Elapsed 1.02 seconds
    '       Thread 3: Elapsed 1.53 seconds
    '       Thread 3: Elapsed 2.05 seconds
    '       Thread 3: Elapsed 2.55 seconds
    '       Thread 3: Elapsed 3.07 seconds
    '       Thread 3: Elapsed 3.57 seconds
    '       Thread 3: Elapsed 4.07 seconds
    '       Thread 3: Elapsed 4.58 seconds
    
  • Pokud má metoda argument, konstruktoru předáte delegáta ParameterizedThreadStart. Má podpis:

    public delegate void ParameterizedThreadStart(object obj)
    
    Public Delegate Sub ParameterizedThreadStart(obj As Object)
    

    Metoda spuštěná delegátem pak může přetypovat (v jazyce C#) nebo převést (v jazyce Visual Basic) parametr na příslušný typ.

    Následující příklad je stejný jako předchozí, s tím rozdílem, že volá Thread(ParameterizedThreadStart) konstruktor. Tato verze metody ExecuteInForeground má jediný parametr, který představuje přibližný počet milisekund, po které má smyčka běžet.

    using System;
    using System.Diagnostics;
    using System.Threading;
    
    public class Example
    {
       public static void Main()
       {
          var th = new Thread(ExecuteInForeground);
          th.Start(4500);
          Thread.Sleep(1000);
          Console.WriteLine("Main thread ({0}) exiting...",
                            Thread.CurrentThread.ManagedThreadId);
       }
    
       private static void ExecuteInForeground(Object obj)
       {
          int interval;
          try {
             interval = (int) obj;
          }
          catch (InvalidCastException) {
             interval = 5000;
          }
          var sw = Stopwatch.StartNew();
          Console.WriteLine("Thread {0}: {1}, Priority {2}",
                            Thread.CurrentThread.ManagedThreadId,
                            Thread.CurrentThread.ThreadState,
                            Thread.CurrentThread.Priority);
          do {
             Console.WriteLine("Thread {0}: Elapsed {1:N2} seconds",
                               Thread.CurrentThread.ManagedThreadId,
                               sw.ElapsedMilliseconds / 1000.0);
             Thread.Sleep(500);
          } while (sw.ElapsedMilliseconds <= interval);
          sw.Stop();
       }
    }
    // The example displays output like the following:
    //       Thread 3: Running, Priority Normal
    //       Thread 3: Elapsed 0.00 seconds
    //       Thread 3: Elapsed 0.52 seconds
    //       Main thread (1) exiting...
    //       Thread 3: Elapsed 1.03 seconds
    //       Thread 3: Elapsed 1.55 seconds
    //       Thread 3: Elapsed 2.06 seconds
    //       Thread 3: Elapsed 2.58 seconds
    //       Thread 3: Elapsed 3.09 seconds
    //       Thread 3: Elapsed 3.61 seconds
    //       Thread 3: Elapsed 4.12 seconds
    
    open System
    open System.Diagnostics
    open System.Threading
    
    let executeInForeground obj =
        let interval =
            try
                unbox<int> obj
            with :? InvalidCastException ->
                5000
    
        let sw = Stopwatch.StartNew()
    
        printfn $"Thread {Thread.CurrentThread.ManagedThreadId}: {Thread.CurrentThread.ThreadState}, Priority {Thread.CurrentThread.Priority}"
    
        while sw.ElapsedMilliseconds <= interval do
            printfn $"Thread {Thread.CurrentThread.ManagedThreadId}: Elapsed {sw.ElapsedMilliseconds / 1000L:N2} seconds"
            Thread.Sleep 500
    
        sw.Stop()
    
    let th = Thread(ParameterizedThreadStart executeInForeground)
    th.Start 4500
    Thread.Sleep 1000
    printfn $"Main thread ({Thread.CurrentThread.ManagedThreadId}) exiting..."
    
    // The example displays output like the following:
    //       Thread 3: Running, Priority Normal
    //       Thread 3: Elapsed 0.00 seconds
    //       Thread 3: Elapsed 0.52 seconds
    //       Main thread (1) exiting...
    //       Thread 3: Elapsed 1.03 seconds
    //       Thread 3: Elapsed 1.55 seconds
    //       Thread 3: Elapsed 2.06 seconds
    //       Thread 3: Elapsed 2.58 seconds
    //       Thread 3: Elapsed 3.09 seconds
    //       Thread 3: Elapsed 3.61 seconds
    //       Thread 3: Elapsed 4.12 seconds
    
    Imports System.Diagnostics
    Imports System.Threading
    
    Module Example4
        Public Sub Main()
            Dim th As New Thread(AddressOf ExecuteInForeground)
            th.Start(4500)
            Thread.Sleep(1000)
            Console.WriteLine("Main thread ({0}) exiting...", Thread.CurrentThread.ManagedThreadId)
        End Sub
    
        Private Sub ExecuteInForeground(obj As Object)
            Dim interval As Integer
            If IsNumeric(obj) Then
                interval = CInt(obj)
            Else
                interval = 5000
            End If
            Dim start As DateTime = DateTime.Now
            Dim sw As Stopwatch = Stopwatch.StartNew()
            Console.WriteLine("Thread {0}: {1}, Priority {2}",
                            Thread.CurrentThread.ManagedThreadId,
                            Thread.CurrentThread.ThreadState,
                            Thread.CurrentThread.Priority)
            Do
                Console.WriteLine("Thread {0}: Elapsed {1:N2} seconds",
                               Thread.CurrentThread.ManagedThreadId,
                               sw.ElapsedMilliseconds / 1000)
                Thread.Sleep(500)
            Loop While sw.ElapsedMilliseconds <= interval
            sw.Stop()
        End Sub
    End Module
    ' The example displays output like the following:
    '       Thread 3: Running, Priority Normal
    '       Thread 3: Elapsed 0.00 seconds
    '       Thread 3: Elapsed 0.52 seconds
    '       Main thread (1) exiting...
    '       Thread 3: Elapsed 1.03 seconds
    '       Thread 3: Elapsed 1.55 seconds
    '       Thread 3: Elapsed 2.06 seconds
    '       Thread 3: Elapsed 2.58 seconds
    '       Thread 3: Elapsed 3.09 seconds
    '       Thread 3: Elapsed 3.61 seconds
    '       Thread 3: Elapsed 4.12 seconds
    

Po spuštění vlákna není nutné zachovat odkaz na Thread objekt. Vlákno se bude dál spouštět, dokud nebude procedura vlákna dokončena.

Načtení objektů vláken

Statickou vlastnost (Shared v jazyce Visual Basic) CurrentThread můžete použít k načtení odkazu na aktuálně spuštěné vlákno z kódu, který vlákno spouští. Následující příklad používá CurrentThread vlastnost k zobrazení informací o hlavním vlákně aplikace, další vlákno popředí, vlákno na pozadí a vlákno fondu vláken.

using System;
using System.Threading;

public class Example
{
   static Object obj = new Object();
   
   public static void Main()
   {
      ThreadPool.QueueUserWorkItem(ShowThreadInformation);
      var th1 = new Thread(ShowThreadInformation);
      th1.Start();
      var th2 = new Thread(ShowThreadInformation);
      th2.IsBackground = true;
      th2.Start();
      Thread.Sleep(500);
      ShowThreadInformation(null); 
   }
   
   private static void ShowThreadInformation(Object state)
   {
      lock (obj) {
         var th  = Thread.CurrentThread;
         Console.WriteLine("Managed thread #{0}: ", th.ManagedThreadId);
         Console.WriteLine("   Background thread: {0}", th.IsBackground);
         Console.WriteLine("   Thread pool thread: {0}", th.IsThreadPoolThread);
         Console.WriteLine("   Priority: {0}", th.Priority);
         Console.WriteLine("   Culture: {0}", th.CurrentCulture.Name);
         Console.WriteLine("   UI culture: {0}", th.CurrentUICulture.Name);
         Console.WriteLine();
      }   
   }
}
// The example displays output like the following:
//       Managed thread #6:
//          Background thread: True
//          Thread pool thread: False
//          Priority: Normal
//          Culture: en-US
//          UI culture: en-US
//       
//       Managed thread #3:
//          Background thread: True
//          Thread pool thread: True
//          Priority: Normal
//          Culture: en-US
//          UI culture: en-US
//       
//       Managed thread #4:
//          Background thread: False
//          Thread pool thread: False
//          Priority: Normal
//          Culture: en-US
//          UI culture: en-US
//       
//       Managed thread #1:
//          Background thread: False
//          Thread pool thread: False
//          Priority: Normal
//          Culture: en-US
//          UI culture: en-US
open System.Threading

let obj = obj ()

let showThreadInformation (state: obj) =
    lock obj (fun () ->
        let th = Thread.CurrentThread
        printfn $"Managed thread #{th.ManagedThreadId}: "
        printfn $"   Background thread: {th.IsBackground}"
        printfn $"   Thread pool thread: {th.IsThreadPoolThread}"
        printfn $"   Priority: {th.Priority}"
        printfn $"   Culture: {th.CurrentCulture.Name}"
        printfn $"   UI culture: {th.CurrentUICulture.Name}"
        printfn "")

ThreadPool.QueueUserWorkItem showThreadInformation |> ignore
let th1 = Thread(ParameterizedThreadStart showThreadInformation)
th1.Start()
let th2 = Thread(ParameterizedThreadStart showThreadInformation)
th2.IsBackground <- true
th2.Start()
Thread.Sleep 500
showThreadInformation ()

// The example displays output like the following:
//       Managed thread #6:
//          Background thread: True
//          Thread pool thread: False
//          Priority: Normal
//          Culture: en-US
//          UI culture: en-US
//
//       Managed thread #3:
//          Background thread: True
//          Thread pool thread: True
//          Priority: Normal
//          Culture: en-US
//          UI culture: en-US
//
//       Managed thread #4:
//          Background thread: False
//          Thread pool thread: False
//          Priority: Normal
//          Culture: en-US
//          UI culture: en-US
//
//       Managed thread #1:
//          Background thread: False
//          Thread pool thread: False
//          Priority: Normal
//          Culture: en-US
//          UI culture: en-US
Imports System.Threading

Module Example2
    Private lock As New Object()

    Public Sub Main()
        ThreadPool.QueueUserWorkItem(AddressOf ShowThreadInformation)
        Dim th1 As New Thread(AddressOf ShowThreadInformation)
        th1.Start()
        Dim th2 As New Thread(AddressOf ShowThreadInformation)
        th2.IsBackground = True
        th2.Start()
        Thread.Sleep(500)
        ShowThreadInformation(Nothing)
    End Sub

    Private Sub ShowThreadInformation(state As Object)
        SyncLock lock
            Dim th As Thread = Thread.CurrentThread
            Console.WriteLine("Managed thread #{0}: ", th.ManagedThreadId)
            Console.WriteLine("   Background thread: {0}", th.IsBackground)
            Console.WriteLine("   Thread pool thread: {0}", th.IsThreadPoolThread)
            Console.WriteLine("   Priority: {0}", th.Priority)
            Console.WriteLine("   Culture: {0}", th.CurrentCulture.Name)
            Console.WriteLine("   UI culture: {0}", th.CurrentUICulture.Name)
            Console.WriteLine()
        End SyncLock
    End Sub
End Module
' The example displays output like the following:
'       ' Managed thread #6:
'          Background thread: True
'          Thread pool thread: False
'          Priority: Normal
'          Culture: en-US
'          UI culture: en-US
'       
'       Managed thread #3:
'          Background thread: True
'          Thread pool thread: True
'          Priority: Normal
'          Culture: en-US
'          UI culture: en-US
'       
'       Managed thread #4:
'          Background thread: False
'          Thread pool thread: False
'          Priority: Normal
'          Culture: en-US
'          UI culture: en-US
'       
'       Managed thread #1:
'          Background thread: False
'          Thread pool thread: False
'          Priority: Normal
'          Culture: en-US
'          UI culture: en-US

Popředí a vlákna na pozadí

Instance třídy Thread představují vlákna v popředí nebo na pozadí. Vlákna na pozadí jsou s jednou výjimkou identická s vlákny popředí: vlákno na pozadí neudržuje proces spuštěný, pokud všechna vlákna popředí skončila. Po zastavení všech vláken popředí zastaví modul runtime všechna vlákna na pozadí a vypne se.

Ve výchozím nastavení se v popředí spustí následující vlákna:

  • Hlavní vlákno aplikace.

  • Všechna vlákna vytvořená voláním konstruktoru Thread třídy.

Ve výchozím nastavení se na pozadí spouští následující vlákna:

  • Vlákna fondu vláken, která pocházejí z fondu pracovních vláken udržovaných modulem runtime. Můžete nakonfigurovat fond vláken a naplánovat práci na vláknech fondu vláken pomocí třídy ThreadPool.

    Note

    Asynchronní operace založené na úlohách se automaticky spouštějí na vláknech fondu vláken. Asynchronní operace založené na úlohách používají Task a Task<TResult> třídy k implementaci asynchronního vzoru založeného na úlohách.

  • Všechna vlákna, která vstupují do spravovaného spouštěcího prostředí z nespravovaného kódu.

Můžete změnit vlákno na spouštění na pozadí nastavením vlastnosti IsBackground kdykoli. Vlákna na pozadí jsou užitečná pro všechny operace, které by měly pokračovat, pokud aplikace běží, ale neměla by bránit jejímu ukončení, například monitorování změn systému souborů nebo příchozí spojení přes sokety.

Následující příklad znázorňuje rozdíl mezi vlákny popředí a pozadí. Je to jako první příklad v části Start a thread , s tím rozdílem, že nastaví vlákno tak, aby se spustilo na pozadí před jeho spuštěním. Jak ukazuje výstup, smyčka se před provedením po dobu pěti sekund přeruší.

using System;
using System.Diagnostics;
using System.Threading;

public class Example
{
   public static void Main()
   {
      var th = new Thread(ExecuteInForeground);
      th.IsBackground = true;
      th.Start();
      Thread.Sleep(1000);
      Console.WriteLine("Main thread ({0}) exiting...",
                        Thread.CurrentThread.ManagedThreadId);
   }

   private static void ExecuteInForeground()
   {
      var sw = Stopwatch.StartNew();
      Console.WriteLine("Thread {0}: {1}, Priority {2}",
                        Thread.CurrentThread.ManagedThreadId,
                        Thread.CurrentThread.ThreadState,
                        Thread.CurrentThread.Priority);
      do {
         Console.WriteLine("Thread {0}: Elapsed {1:N2} seconds",
                           Thread.CurrentThread.ManagedThreadId,
                           sw.ElapsedMilliseconds / 1000.0);
         Thread.Sleep(500);
      } while (sw.ElapsedMilliseconds <= 5000);
      sw.Stop();
   }
}
// The example displays output like the following:
//       Thread 3: Background, Priority Normal
//       Thread 3: Elapsed 0.00 seconds
//       Thread 3: Elapsed 0.51 seconds
//       Main thread (1) exiting...
open System.Diagnostics
open System.Threading

let executeInForeground () =
    let sw = Stopwatch.StartNew()
    printfn $"Thread {Thread.CurrentThread.ManagedThreadId}: {Thread.CurrentThread.ThreadState}, Priority {Thread.CurrentThread.Priority}"
    while sw.ElapsedMilliseconds <= 5000 do
        printfn $"Thread {Thread.CurrentThread.ManagedThreadId}: Elapsed {sw.ElapsedMilliseconds / 1000L:N2} seconds"
        Thread.Sleep 500
    sw.Stop()

let th = Thread executeInForeground
th.IsBackground <- true
th.Start()
Thread.Sleep 1000
printfn $"Main thread ({Thread.CurrentThread.ManagedThreadId}) exiting..."

// The example displays output like the following:
//       Thread 3: Background, Priority Normal
//       Thread 3: Elapsed 0.00 seconds
//       Thread 3: Elapsed 0.51 seconds
//       Main thread (1) exiting...
Imports System.Diagnostics
Imports System.Threading

Module Example1
    Public Sub Main()
        Dim th As New Thread(AddressOf ExecuteInForeground)
        th.IsBackground = True
        th.Start()
        Thread.Sleep(1000)
        Console.WriteLine("Main thread ({0}) exiting...", Thread.CurrentThread.ManagedThreadId)
    End Sub

    Private Sub ExecuteInForeground()
        Dim start As DateTime = DateTime.Now
        Dim sw As Stopwatch = Stopwatch.StartNew()
        Console.WriteLine("Thread {0}: {1}, Priority {2}",
                        Thread.CurrentThread.ManagedThreadId,
                        Thread.CurrentThread.ThreadState,
                        Thread.CurrentThread.Priority)
        Do
            Console.WriteLine("Thread {0}: Elapsed {1:N2} seconds",
                           Thread.CurrentThread.ManagedThreadId,
                           sw.ElapsedMilliseconds / 1000)
            Thread.Sleep(500)
        Loop While sw.ElapsedMilliseconds <= 5000
        sw.Stop()
    End Sub
End Module
' The example displays output like the following:
'       Thread 3: Background, Priority Normal
'       Thread 3: Elapsed 0.00 seconds
'       Thread 3: Elapsed 0.51 seconds
'       Main thread (1) exiting...

Kultura a vlákna

Každé vlákno má jazykovou verzi reprezentovanou CurrentCulture vlastností a jazykovou verzi uživatelského rozhraní reprezentovanou CurrentUICulture vlastností. Aktuální kultura podporuje kulturně citlivé operace, jako je parsování a formátování, porovnání řetězců a řazení, a rovněž řídí systém zápisu a kalendář používaný vláknem. Aktuální kulturní nastavení uživatelského rozhraní umožňuje kulturně citlivé vyhledávání prostředků v souborech prostředků.

Important

CurrentCulture Vlastnosti CurrentUICulture a vlastnosti nefungují spolehlivě při použití s jakýmkoli jiným vláknem než s aktuálním vláknem. Vyvolá InvalidOperationException se, pokud se vlákno pokusí číst nebo zapisovat tyto vlastnosti do jiného vlákna. Doporučujeme, abyste k načtení a nastavení aktuální jazykové kultury použili vlastnosti CultureInfo.CurrentCulture a CultureInfo.CurrentUICulture.

Při vytvoření instance nového vlákna se jeho kultura a jazyková verze uživatelského rozhraní definují aktuální kulturou systému a jazykovou verzí uživatelského rozhraní, a nikoli kulturou a jazykovou verzí uživatelského rozhraní vlákna, ze kterého bylo nové vlákno vytvořeno. To například znamená, že pokud je aktuální systémová jazyková verze angličtina (Spojené státy) a aktuální jazyková verze primárního vlákna aplikace je francouzština (Francie), jazyková verze nového vlákna vytvořeného voláním Thread(ParameterizedThreadStart) konstruktoru z primárního vlákna je angličtina (Spojené státy) a ne francouzština (Francie). Další informace najdete v části tématu třídy CultureInfo "Kultura a vlákna."

Important

To neplatí pro vlákna, která spouští asynchronní operace pro aplikace, které cílí na rozhraní .NET Framework 4.6 a novější verze. V tomto případě jsou kulturní nastavení a nastavení jazyka uživatelského rozhraní součástí kontextu asynchronní operace; vlákno, na kterém se asynchronní operace ve výchozím nastavení provádí, dědí kulturní nastavení a nastavení jazyka uživatelského rozhraní vlákna, ze kterého byla asynchronní operace spuštěna. Další informace naleznete v části "Kultura a úlohově založené asynchronní operace" poznámek třídy CultureInfo.

Pokud chcete zajistit, aby všechna vlákna spuštěná v aplikaci sdílela stejné jazykové a uživatelské nastavení, můžete provést jednu z následujících dvou akcí:

Pro více informací a příklady naleznete v sekci "Kultura a vlákna" poznámek třídy CultureInfo.

Získat informace o vláknech a jejich řízení

Můžete načíst řadu hodnot vlastností, které poskytují informace o vlákně. V některých případech můžete také nastavit tyto hodnoty vlastností pro řízení operace vlákna. Mezi tyto vlastnosti vlákna patří:

  • Název. Name je vlastnost, kterou lze zapsat pouze jednou a kterou můžete použít k identifikaci vlákna. Jeho výchozí hodnota je null.

  • Kód hash, který můžete načíst voláním GetHashCode metody. Kód hash lze použít k jednoznačné identifikaci vlákna; po celou dobu životnosti vlákna nebude jeho kód hash kolidovat s hodnotou z žádného jiného vlákna bez ohledu na doménu aplikace, ze které hodnotu získáte.

  • ID vlákna. Hodnota vlastnosti jen ManagedThreadId pro čtení je přiřazena modulem runtime a jednoznačně identifikuje vlákno v rámci procesu.

    Note

    ThreadId operačního systému nemá žádný pevný vztah ke spravovanému vláknu, protože nespravovaný hostitel může řídit vztah mezi spravovanými a nespravovanými vlákny. Konkrétně sofistikovaný hostitel může rozhraní API pro hostování CLR použít k naplánování mnoha spravovaných vláken na stejném vlákně operačního systému nebo k přesunutí spravovaného vlákna mezi různými vlákny operačního systému.

  • Aktuální stav vlákna. Po dobu trvání existence je vlákno vždy v jednom nebo více stavech definovaných ThreadState vlastností.

  • Úroveň priority plánování, která je definována ThreadPriority vlastností. I když tuto hodnotu můžete nastavit na požádání o prioritu vlákna, není zaručeno, že ji operační systém splní.

  • Vlastnost pouze pro čtení IsThreadPoolThread, která označuje, zda je vlákno vlákno fondu.

  • Vlastnost IsBackground. Další informace najdete v části Popředí a vlákna na pozadí .

Konstruktory

Name Description
Thread(ParameterizedThreadStart, Int32)

Inicializuje novou instanci Thread třídy, určuje delegát, který umožňuje předat objekt do vlákna při spuštění vlákna a určení maximální velikosti zásobníku pro vlákno.

Thread(ParameterizedThreadStart)

Inicializuje novou instanci Thread třídy a určuje delegát, který umožňuje předat objekt do vlákna při spuštění vlákna.

Thread(ThreadStart, Int32)

Inicializuje novou instanci Thread třídy a určuje maximální velikost zásobníku pro vlákno.

Thread(ThreadStart)

Inicializuje novou instanci Thread třídy.

Vlastnosti

Name Description
ApartmentState
Zastaralé.
Zastaralé.

Získá nebo nastaví stav bytu tohoto vlákna.

CurrentContext

Získá aktuální kontext, ve kterém je vlákno spuštěno.

CurrentCulture

Získá nebo nastaví jazykovou verzi pro aktuální vlákno.

CurrentPrincipal

Získá nebo nastaví aktuální objekt zabezpečení vlákna (pro zabezpečení na základě role).

CurrentThread

Získá aktuálně spuštěné vlákno.

CurrentUICulture

Získá nebo nastaví aktuální jazykovou verzi používanou Resource Managerem k vyhledání prostředků specifických pro jazykovou verzi za běhu.

ExecutionContext

ExecutionContext Získá objekt, který obsahuje informace o různých kontextech aktuálního vlákna.

IsAlive

Získá hodnotu označující stav spuštění aktuálního vlákna.

IsBackground

Získá nebo nastaví hodnotu označující, zda vlákno je vlákno na pozadí.

IsThreadPoolThread

Získá hodnotu určující, zda vlákno patří do spravovaného fondu vláken.

ManagedThreadId

Získá jedinečný identifikátor pro aktuální spravované vlákno.

Name

Získá nebo nastaví název vlákna.

Priority

Získá nebo nastaví hodnotu označující prioritu plánování vlákna.

ThreadState

Získá hodnotu obsahující stavy aktuálního vlákna.

Metody

Name Description
Abort()
Zastaralé.

ThreadAbortException Vyvolá ve vlákně, na kterém je vyvolána, aby zahájil proces ukončení vlákna. Volání této metody obvykle ukončí vlákno.

Abort(Object)
Zastaralé.

ThreadAbortException Vyvolá ve vlákně, na kterém je vyvolána, aby zahájil proces ukončení vlákna a zároveň poskytuje informace o výjimce o ukončení vlákna. Volání této metody obvykle ukončí vlákno.

AllocateDataSlot()

Přidělí nepojmenovaný datový slot pro všechna vlákna. Pokud chcete dosáhnout lepšího výkonu, použijte pole označená atributem ThreadStaticAttribute .

AllocateNamedDataSlot(String)

Přidělí pojmenovaný datový slot pro všechna vlákna. Pokud chcete dosáhnout lepšího výkonu, použijte pole označená atributem ThreadStaticAttribute .

BeginCriticalRegion()

Oznámí hostiteli, že spuštění se chystá zadat oblast kódu, ve které může dojít k přerušení nebo neošetřené výjimce, které by mohly ohrozit jiné úlohy v doméně aplikace.

BeginThreadAffinity()

Upozorní hostitele, který spravovaný kód chystá spouštět instrukce, které závisí na identitě aktuálního vlákna fyzického operačního systému.

DisableComObjectEagerCleanup()

Vypne automatické vyčištění obálky volatelné za běhu (RCW) pro aktuální vlákno.

EndCriticalRegion()

Upozorní hostitele, že spuštění se chystá zadat oblast kódu, ve které jsou účinky přerušení vlákna nebo neošetřené výjimky omezeny na aktuální úlohu.

EndThreadAffinity()

Upozorní hostitele, že spravovaný kód dokončil provádění pokynů, které závisí na identitě aktuálního vlákna fyzického operačního systému.

Equals(Object)

Určuje, zda je zadaný objekt roven aktuálnímu objektu.

(Zděděno od Object)
Finalize()

Zajišťuje uvolnění prostředků a provádění dalších operací čištění, když uvolňování paměti objekt uvolní Thread .

FreeNamedDataSlot(String)

Eliminuje přidružení mezi názvem a slotem pro všechna vlákna v procesu. Pokud chcete dosáhnout lepšího výkonu, použijte pole označená atributem ThreadStaticAttribute .

GetApartmentState()

ApartmentState Vrátí hodnotu označující stav apartmánu.

GetCompressedStack()
Zastaralé.
Zastaralé.

CompressedStack Vrátí objekt, který lze použít k zachycení zásobníku pro aktuální vlákno.

GetCurrentProcessorId()

Získá ID použité k označení procesoru, který aktuální vlákno spouští.

GetData(LocalDataStoreSlot)

Načte hodnotu ze zadaného slotu v aktuálním vlákně v aktuální doméně vlákna. Pokud chcete dosáhnout lepšího výkonu, použijte pole označená atributem ThreadStaticAttribute .

GetDomain()

Vrátí aktuální doménu, ve které je spuštěné aktuální vlákno.

GetDomainID()

Vrátí jedinečný identifikátor domény aplikace.

GetHashCode()

Vrátí kód hash pro aktuální vlákno.

GetHashCode()

Slouží jako výchozí funkce hash.

(Zděděno od Object)
GetNamedDataSlot(String)

Vyhledá pojmenovaný datový slot. Pokud chcete dosáhnout lepšího výkonu, použijte pole označená atributem ThreadStaticAttribute .

GetType()

Získá Type aktuální instance.

(Zděděno od Object)
Interrupt()

Přeruší vlákno, které je ve WaitSleepJoin stavu vlákna.

Join()

Blokuje volající vlákno, dokud se vlákno reprezentované touto instancí ukončí, a zároveň pokračuje v provádění standardního modelu COM a SendMessage pumpování.

Join(Int32)

Blokuje volající vlákno, dokud vlákno reprezentované touto instancí neukončí nebo zadaný čas uplynou, zatímco pokračuje v provádění standardního modelu COM a SendMessage pumpování.

Join(TimeSpan)

Blokuje volající vlákno, dokud vlákno reprezentované touto instancí neukončí nebo zadaný čas uplynou, zatímco pokračuje v provádění standardního modelu COM a SendMessage pumpování.

MemberwiseClone()

Vytvoří mělkou kopii aktuálního Object.

(Zděděno od Object)
MemoryBarrier()

Synchronizuje přístup k paměti následujícím způsobem: Procesor, který spouští aktuální vlákno, nemůže změnit pořadí instrukcí tak, aby paměť přistupovala před voláním ke MemoryBarrier() spuštění po spuštění paměti, které následují za voláním MemoryBarrier().

ResetAbort()
Zastaralé.

Abort(Object) Zruší žádost o aktuální vlákno.

Resume()
Zastaralé.
Zastaralé.
Zastaralé.

Obnoví vlákno, které bylo pozastaveno.

SetApartmentState(ApartmentState)

Nastaví stav bytu vlákna před jeho spuštěním.

SetCompressedStack(CompressedStack)
Zastaralé.
Zastaralé.

Použije zachycený CompressedStack na aktuální vlákno.

SetData(LocalDataStoreSlot, Object)

Nastaví data v zadaném slotu v aktuálně běžícím vlákně pro aktuální doménu daného vlákna. Pokud chcete dosáhnout lepšího výkonu, použijte místo toho pole označená atributem ThreadStaticAttribute .

Sleep(Int32)

Pozastaví aktuální vlákno pro zadaný počet milisekund.

Sleep(TimeSpan)

Pozastaví aktuální vlákno po zadanou dobu.

SpinWait(Int32)

Způsobí, že vlákno počká na kolikrát definovaný parametr iterations .

Start()

Způsobí, že operační systém změní stav aktuální instance na Running.

Start(Object)

Způsobí, že operační systém změní stav aktuální instance na Runninga volitelně poskytuje objekt obsahující data, která má být použita metodou, kterou vlákno provede.

Suspend()
Zastaralé.
Zastaralé.
Zastaralé.

Buď pozastaví vlákno, nebo pokud je vlákno již pozastaveno, nemá žádný vliv.

ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)
TrySetApartmentState(ApartmentState)

Nastaví stav bytu vlákna před jeho spuštěním.

UnsafeStart()

Způsobí, že operační systém změní stav aktuální instance na Running.

UnsafeStart(Object)

Způsobí, že operační systém změní stav aktuální instance na Runninga volitelně poskytuje objekt obsahující data, která má být použita metodou, kterou vlákno provede.

VolatileRead(Byte)
Zastaralé.

Přečte hodnotu pole. V systémech, které to vyžadují, vloží bariéru paměti, která brání procesoru v uspořádání operací paměti následujícím způsobem: Pokud se za touto metodou v kódu zobrazí čtení nebo zápis, procesor jej nemůže přesunout před touto metodou.

VolatileRead(Double)
Zastaralé.

Přečte hodnotu pole. V systémech, které to vyžadují, vloží bariéru paměti, která brání procesoru v uspořádání operací paměti následujícím způsobem: Pokud se za touto metodou v kódu zobrazí čtení nebo zápis, procesor jej nemůže přesunout před touto metodou.

VolatileRead(Int16)
Zastaralé.

Přečte hodnotu pole. V systémech, které to vyžadují, vloží bariéru paměti, která brání procesoru v uspořádání operací paměti následujícím způsobem: Pokud se za touto metodou v kódu zobrazí čtení nebo zápis, procesor jej nemůže přesunout před touto metodou.

VolatileRead(Int32)
Zastaralé.

Přečte hodnotu pole. V systémech, které to vyžadují, vloží bariéru paměti, která brání procesoru v uspořádání operací paměti následujícím způsobem: Pokud se za touto metodou v kódu zobrazí čtení nebo zápis, procesor jej nemůže přesunout před touto metodou.

VolatileRead(Int64)
Zastaralé.

Přečte hodnotu pole. V systémech, které to vyžadují, vloží bariéru paměti, která brání procesoru v uspořádání operací paměti následujícím způsobem: Pokud se za touto metodou v kódu zobrazí čtení nebo zápis, procesor jej nemůže přesunout před touto metodou.

VolatileRead(IntPtr)
Zastaralé.

Přečte hodnotu pole. V systémech, které to vyžadují, vloží bariéru paměti, která brání procesoru v uspořádání operací paměti následujícím způsobem: Pokud se za touto metodou v kódu zobrazí čtení nebo zápis, procesor jej nemůže přesunout před touto metodou.

VolatileRead(Object)
Zastaralé.

Přečte hodnotu pole. V systémech, které to vyžadují, vloží bariéru paměti, která brání procesoru v uspořádání operací paměti následujícím způsobem: Pokud se za touto metodou v kódu zobrazí čtení nebo zápis, procesor jej nemůže přesunout před touto metodou.

VolatileRead(SByte)
Zastaralé.

Přečte hodnotu pole. V systémech, které to vyžadují, vloží bariéru paměti, která brání procesoru v uspořádání operací paměti následujícím způsobem: Pokud se za touto metodou v kódu zobrazí čtení nebo zápis, procesor jej nemůže přesunout před touto metodou.

VolatileRead(Single)
Zastaralé.

Přečte hodnotu pole. V systémech, které to vyžadují, vloží bariéru paměti, která brání procesoru v uspořádání operací paměti následujícím způsobem: Pokud se za touto metodou v kódu zobrazí čtení nebo zápis, procesor jej nemůže přesunout před touto metodou.

VolatileRead(UInt16)
Zastaralé.

Přečte hodnotu pole. V systémech, které to vyžadují, vloží bariéru paměti, která brání procesoru v uspořádání operací paměti následujícím způsobem: Pokud se za touto metodou v kódu zobrazí čtení nebo zápis, procesor jej nemůže přesunout před touto metodou.

VolatileRead(UInt32)
Zastaralé.

Přečte hodnotu pole. V systémech, které to vyžadují, vloží bariéru paměti, která brání procesoru v uspořádání operací paměti následujícím způsobem: Pokud se za touto metodou v kódu zobrazí čtení nebo zápis, procesor jej nemůže přesunout před touto metodou.

VolatileRead(UInt64)
Zastaralé.

Přečte hodnotu pole. V systémech, které to vyžadují, vloží bariéru paměti, která brání procesoru v uspořádání operací paměti následujícím způsobem: Pokud se za touto metodou v kódu zobrazí čtení nebo zápis, procesor jej nemůže přesunout před touto metodou.

VolatileRead(UIntPtr)
Zastaralé.

Přečte hodnotu pole. V systémech, které to vyžadují, vloží bariéru paměti, která brání procesoru v uspořádání operací paměti následujícím způsobem: Pokud se za touto metodou v kódu zobrazí čtení nebo zápis, procesor jej nemůže přesunout před touto metodou.

VolatileWrite(Byte, Byte)
Zastaralé.

Zapíše hodnotu do pole. V systémech, které to vyžadují, vloží bariéru paměti, která brání procesoru v uspořádání operací paměti následujícím způsobem: Pokud se před touto metodou v kódu zobrazí operace čtení nebo zápisu, procesor jej po této metodě nemůže přesunout.

VolatileWrite(Double, Double)
Zastaralé.

Zapíše hodnotu do pole. V systémech, které to vyžadují, vloží bariéru paměti, která brání procesoru v uspořádání operací paměti následujícím způsobem: Pokud se před touto metodou v kódu zobrazí operace čtení nebo zápisu, procesor jej po této metodě nemůže přesunout.

VolatileWrite(Int16, Int16)
Zastaralé.

Zapíše hodnotu do pole. V systémech, které to vyžadují, vloží bariéru paměti, která brání procesoru v uspořádání operací paměti následujícím způsobem: Pokud se před touto metodou v kódu zobrazí operace čtení nebo zápisu, procesor jej po této metodě nemůže přesunout.

VolatileWrite(Int32, Int32)
Zastaralé.

Zapíše hodnotu do pole. V systémech, které to vyžadují, vloží bariéru paměti, která brání procesoru v uspořádání operací paměti následujícím způsobem: Pokud se před touto metodou v kódu zobrazí operace čtení nebo zápisu, procesor jej po této metodě nemůže přesunout.

VolatileWrite(Int64, Int64)
Zastaralé.

Zapíše hodnotu do pole. V systémech, které to vyžadují, vloží bariéru paměti, která brání procesoru v uspořádání operací paměti následujícím způsobem: Pokud se před touto metodou v kódu zobrazí operace čtení nebo zápisu, procesor jej po této metodě nemůže přesunout.

VolatileWrite(IntPtr, IntPtr)
Zastaralé.

Zapíše hodnotu do pole. V systémech, které to vyžadují, vloží bariéru paměti, která brání procesoru v uspořádání operací paměti následujícím způsobem: Pokud se před touto metodou v kódu zobrazí operace čtení nebo zápisu, procesor jej po této metodě nemůže přesunout.

VolatileWrite(Object, Object)
Zastaralé.

Zapíše hodnotu do pole. V systémech, které to vyžadují, vloží bariéru paměti, která brání procesoru v uspořádání operací paměti následujícím způsobem: Pokud se před touto metodou v kódu zobrazí operace čtení nebo zápisu, procesor jej po této metodě nemůže přesunout.

VolatileWrite(SByte, SByte)
Zastaralé.

Zapíše hodnotu do pole. V systémech, které to vyžadují, vloží bariéru paměti, která brání procesoru v uspořádání operací paměti následujícím způsobem: Pokud se před touto metodou v kódu zobrazí operace čtení nebo zápisu, procesor jej po této metodě nemůže přesunout.

VolatileWrite(Single, Single)
Zastaralé.

Zapíše hodnotu do pole. V systémech, které to vyžadují, vloží bariéru paměti, která brání procesoru v uspořádání operací paměti následujícím způsobem: Pokud se před touto metodou v kódu zobrazí operace čtení nebo zápisu, procesor jej po této metodě nemůže přesunout.

VolatileWrite(UInt16, UInt16)
Zastaralé.

Zapíše hodnotu do pole. V systémech, které to vyžadují, vloží bariéru paměti, která brání procesoru v uspořádání operací paměti následujícím způsobem: Pokud se před touto metodou v kódu zobrazí operace čtení nebo zápisu, procesor jej po této metodě nemůže přesunout.

VolatileWrite(UInt32, UInt32)
Zastaralé.

Zapíše hodnotu do pole. V systémech, které to vyžadují, vloží bariéru paměti, která brání procesoru v uspořádání operací paměti následujícím způsobem: Pokud se před touto metodou v kódu zobrazí operace čtení nebo zápisu, procesor jej po této metodě nemůže přesunout.

VolatileWrite(UInt64, UInt64)
Zastaralé.

Zapíše hodnotu do pole. V systémech, které to vyžadují, vloží bariéru paměti, která brání procesoru v uspořádání operací paměti následujícím způsobem: Pokud se před touto metodou v kódu zobrazí operace čtení nebo zápisu, procesor jej po této metodě nemůže přesunout.

VolatileWrite(UIntPtr, UIntPtr)
Zastaralé.

Zapíše hodnotu do pole. V systémech, které to vyžadují, vloží bariéru paměti, která brání procesoru v uspořádání operací paměti následujícím způsobem: Pokud se před touto metodou v kódu zobrazí operace čtení nebo zápisu, procesor jej po této metodě nemůže přesunout.

Yield()

Způsobí, že volající vlákno předá řízení jinému vláknu, které je připraveno ke spuštění na aktuálním procesoru. Operační systém vybere vlákno, které se má provést.

Explicitní implementace rozhraní

Name Description
_Thread.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Mapuje sadu názvů na odpovídající sadu identifikátorů pro rozesílání.

_Thread.GetTypeInfo(UInt32, UInt32, IntPtr)

Načte informace o typu objektu, který lze použít k získání informací o typu pro rozhraní.

_Thread.GetTypeInfoCount(UInt32)

Získá počet rozhraní typu informací, které objekt poskytuje (0 nebo 1).

_Thread.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Poskytuje přístup k vlastnostem a metodám vystaveným objektem.

Platí pro

Bezpečný přístup z více vláken

Tento typ je bezpečný pro přístup z více vláken.

Viz také