Thread Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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 secondsopen 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 secondsImports 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 secondsPokud 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
ExecuteInForegroundmá 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 secondsopen 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 secondsImports 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í:
Můžete předat CultureInfo objekt, který představuje tuto jazykovou verzi, delegátu ParameterizedThreadStart nebo metodě ThreadPool.QueueUserWorkItem(WaitCallback, Object).
U aplikací spuštěných v rozhraní .NET Framework 4.5 a novějších verzích můžete definovat jazykovou verzi a jazykovou verzi uživatelského rozhraní, která se mají přiřadit ke všem vláknům vytvořeným v doméně aplikace nastavením hodnoty CultureInfo.DefaultThreadCurrentCulture a CultureInfo.DefaultThreadCurrentUICulture vlastností. Všimněte si, že se jedná o nastavení domény pro jednotlivé aplikace.
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 |
| 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 |
| 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.