Thread Třída

Definice

Vytvoří a řídí vlákno, nastaví jeho prioritu a získá svůj stav.Creates and controls a thread, sets its priority, and gets its status.

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

Příklady

Následující příklad ukazuje funkci jednoduchého dělení na vlákna.The following example demonstrates simple threading functionality.

// [C++]
// Compile using /clr option.
using namespace System;
using namespace System::Threading;

// Simple threading scenario:  Start a Shared method running
// on a second thread.
public ref class ThreadExample
{
public:

   // 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.
   static void ThreadProc()
   {
      for ( int i = 0; i < 10; i++ )
      {
         Console::Write(  "ThreadProc: " );
         Console::WriteLine( i );
         
         // Yield the rest of the time slice.
         Thread::Sleep( 0 );

      }
   }

};

int main()
{
   Console::WriteLine( "Main thread: Start a second thread." );
   
   // Create the thread, passing a ThreadStart delegate that
   // represents the ThreadExample::ThreadProc method.  For a 
   // delegate representing a static method, no object is
   // required.
   Thread^ oThread = gcnew Thread( gcnew ThreadStart( &ThreadExample::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 oThread->Start() to see the difference.
   oThread->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." );
   oThread->Join();
   Console::WriteLine(  "Main thread: ThreadProc.Join has returned.  Press Enter to end program." );
   Console::ReadLine();
   return 0;
}

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();
    }
}
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 vytváří výstup podobný následujícímu:This code produces output similar to the following:

[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

Při spuštění procesu modul CLR (Common Language Runtime) automaticky vytvoří jedno vlákno na popředí pro spuštění kódu aplikace.When a process starts, the common language runtime automatically creates a single foreground thread to execute application code. Společně s tímto hlavním vláknem na popředí může proces vytvořit jeden nebo více vláken, aby bylo možné provést část kódu programu přidruženého k procesu.Along with this main foreground thread, a process can create one or more threads to execute a portion of the program code associated with the process. Tato vlákna lze spustit buď v popředí, nebo na pozadí.These threads can execute either in the foreground or in the background. Kromě toho můžete použít třídu ThreadPool ke spouštění kódu v pracovních vláknech, které jsou spravovány modulem CLR (Common Language Runtime).In addition, you can use the ThreadPool class to execute code on worker threads that are managed by the common language runtime.

V tomto oddíluIn this section

Spuštění vláknaStarting a thread
Načítání objektů vlákna Retrieving Thread objects
vlákna v popředí a na pozadíForeground and background threads
jazykové verze a vláknaCulture and threads
Získání informací o vláknech a jejich řízeníGetting information about and controlling threads

Spuštění vláknaStarting a thread

Spustíte vlákno tím, že poskytnete delegáta, který představuje metodu, kterou je vlákno spuštěno v konstruktoru třídy.You start a thread by supplying a delegate that represents the method the thread is to execute in its class constructor. Pak zavoláte metodu Start k zahájení provádění.You then call the Start method to begin execution.

Konstruktory Thread mohou převzít jeden ze dvou typů delegátů v závislosti na tom, zda můžete předat argument k metodě, která má být provedena:The Thread constructors can take either of two delegate types, depending on whether you can pass an argument to the method to be executed:

  • Pokud metoda nemá žádné argumenty, předáte ThreadStart delegáta konstruktoru.If the method has no arguments, you pass a ThreadStart delegate to the constructor. Má signaturu:It has the signature:

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

    Následující příklad vytvoří a spustí vlákno, které provádí metodu ExecuteInForeground.The following example creates and starts a thread that executes the ExecuteInForeground method. Metoda zobrazí informace o některých vlastnostech vlákna a potom spustí smyčku, ve které se pozastaví na polovinu sekundy, a zobrazí uplynulý počet sekund.The method displays information about some thread properties, then executes a loop in which it pauses for half a second and displays the elapsed number of seconds. Po spuštění vlákna po dobu alespoň pěti sekund končí smyčka a vlákno ukončí provádění.When the thread has executed for at least five seconds, the loop ends and the thread terminates execution.

    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()
       {
          DateTime start = DateTime.Now;
          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
    
    Imports System.Diagnostics
    Imports System.Threading
    
    Module Example
       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, předáte ParameterizedThreadStart delegáta konstruktoru.If the method has an argument, you pass a ParameterizedThreadStart delegate to the constructor. Má signaturu:It has the signature:

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

    Metoda spuštěná delegátem pak může přetypování (in C#) nebo převést (v Visual Basic) parametru na příslušný typ.The method executed by the delegate can then cast (in C#) or convert (in Visual Basic) the parameter to the appropriate type.

    Následující příklad je stejný jako předchozí, s tím rozdílem, že volá konstruktor Thread(ParameterizedThreadStart).The following example is identical to the previous one, except that it calls the Thread(ParameterizedThreadStart) constructor. Tato verze metody ExecuteInForeground má jeden parametr, který představuje přibližný počet milisekund, po které má být smyčka provedena.This version of the ExecuteInForeground method has a single parameter that represents the approximate number of milliseconds the loop is to execute.

    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;
          }
          DateTime start = DateTime.Now;
          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
    
    Imports System.Diagnostics
    Imports System.Threading
    
    Module Example
       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é uchovávat odkaz na objekt Thread.It is not necessary to retain a reference to a Thread object once you have started the thread. Vlákno pokračuje v provádění, dokud není dokončena procedura vlákna.The thread continues to execute until the thread procedure is complete.

Načítání objektů vláknaRetrieving Thread objects

Můžete použít vlastnost CurrentThread static (Shared in Visual Basic) k načtení odkazu na aktuálně spuštěné vlákno z kódu, který vlákno provádí.You can use the static (Shared in Visual Basic) CurrentThread property to retrieve a reference to the currently executing thread from the code that the thread is executing. V následujícím příkladu je použita vlastnost CurrentThread pro zobrazení informací o hlavním vlákně aplikace, dalším vlákně na pozadí, vlákně vlákna a vláknu fondu vláken.The following example uses the CurrentThread property to display information about the main application thread, another foreground thread, a background thread, and a thread pool thread.

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
Imports System.Threading

Module Example
   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

Vlákna v popředí a na pozadíForeground and background threads

Instance Thread třídy reprezentují buď vlákna na popředí, nebo vlákna na pozadí.Instances of the Thread class represent either foreground threads or background threads. Vlákna na pozadí jsou shodná s vlákny na popředí s jednou výjimkou: vlákno na pozadí neudržuje proces spuštěný, pokud jsou ukončena všechna vlákna na popředí.Background threads are identical to foreground threads with one exception: a background thread does not keep a process running if all foreground threads have terminated. Po zastavení všech vláken na popředí zastaví modul runtime všechna vlákna na pozadí a ukončí činnost.Once all foreground threads have been stopped, the runtime stops all background threads and shuts down.

Ve výchozím nastavení jsou následující vlákna spouštěna v popředí:By default, the following threads execute in the foreground:

  • Hlavní vlákno aplikaceThe main application thread.

  • Všechna vlákna vytvořená voláním konstruktoru třídy Thread.All threads created by calling a Thread class constructor.

Ve výchozím nastavení jsou následující vlákna spouštěna na pozadí:The following threads execute in the background by default:

  • Vlákna fondu vláken, která jsou fondem pracovních vláken udržovaných modulem runtime.Thread pool threads, which are a pool of worker threads maintained by the runtime. Můžete nakonfigurovat fond vláken a naplánovat práci ve fondu vláken pomocí třídy ThreadPool.You can configure the thread pool and schedule work on thread pool threads by using the ThreadPool class.

    Poznámka

    Asynchronní operace založené na úlohách se automaticky spouštějí v vláknech fondu vláken.Task-based asynchronous operations automatically execute on thread pool threads. Asynchronní operace založené na úlohách používají třídy Task a Task<TResult> k implementaci asynchronního vzoru založeného na úlohách.Task-based asynchronous operations use the Task and Task<TResult> classes to implement the task-based asynchronous pattern.

  • Všechna vlákna, která vstupují do spravovaného prostředí pro spuštění z nespravovaného kódu.All threads that enter the managed execution environment from unmanaged code.

Vlákno můžete změnit tak, aby se spustilo na pozadí, a to tak, že vlastnost IsBackground nastavíte kdykoli.You can change a thread to execute in the background by setting the IsBackground property at any time. Vlákna na pozadí jsou užitečná pro všechny operace, které by měly pokračovat tak dlouho, dokud je aplikace spuštěná, ale neměla by bránit ukončení aplikace, jako je monitorování změn systému souborů nebo připojení soketů příchozích zpráv.Background threads are useful for any operation that should continue as long as an application is running but should not prevent the application from terminating, such as monitoring file system changes or incoming socket connections.

Následující příklad znázorňuje rozdíl mezi vlákny v popředí a na pozadí.The following example illustrates the difference between foreground and background threads. Je podobně jako v prvním příkladu v oddílu spuštění vlákna , s tím rozdílem, že před spuštěním nastaví vlákno, které se spustí na pozadí.It is like the first example in the Starting a thread section, except that it sets the thread to execute in the background before starting it. Jak ukazuje výstup, je smyčka přerušena, než se spustí po dobu pěti sekund.As the output shows, the loop is interrupted before it executes for five seconds.

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()
   {
      DateTime start = DateTime.Now;
      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...
Imports System.Diagnostics
Imports System.Threading

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

Jazyková verze a vláknaCulture and threads

Každé vlákno má jazykovou verzi, reprezentovanou vlastností CurrentCulture a jazykovou verzi uživatelského rozhraní reprezentované vlastností CurrentUICulture.Each thread has a culture, represented by the CurrentCulture property, and a UI culture, represented by the CurrentUICulture property. Aktuální jazyková verze podporuje tyto operace závislé na jazykové verzi jako analýzu a formátování, porovnání řetězců a řazení a také ovládá systém zápisu a kalendář používaný vláknem.The current culture supports such culture-sensitive operations as parsing and formatting, string comparison and sorting, and also controls the writing system and calendar used by a thread. Aktuální jazyková verze uživatelského rozhraní poskytuje načtení prostředků závislých na jazykové verzi v souborech prostředků.The current UI culture provides for culture-sensitive retrieval of resources in resource files.

Důležité

Vlastnosti CurrentCulture a CurrentUICulture nefungují spolehlivě při použití s jakýmkoli jiným vláknem, než je aktuální vlákno.The CurrentCulture and CurrentUICulture properties don't work reliably when used with any thread other than the current thread. V .NET Framework je čtení těchto vlastností spolehlivé, přestože nastavení těchto vlastností pro jiné vlákno, než je aktuální vlákno, není.In .NET Framework, reading these properties is reliable, although setting these properties for a thread other than the current thread is not. V rozhraní .NET Core je vyvolána InvalidOperationException, pokud se vlákno pokusí přečíst nebo zapsat tyto vlastnosti v jiném vlákně.On .NET Core, an InvalidOperationException is thrown if a thread attempts to read or write these properties on a different thread. Doporučujeme, abyste pro načtení a nastavení aktuální jazykové verze používali vlastnosti CultureInfo.CurrentCulture a CultureInfo.CurrentUICulture.We recommend that you use the CultureInfo.CurrentCulture and CultureInfo.CurrentUICulture properties to retrieve and set the current culture.

Když je vytvořena instance nového vlákna, jeho jazyková verze a jazyková verze uživatelského rozhraní jsou definovány aktuální jazykovou verzí systému a jazykovou verzí uživatelského rozhraní, a nikoli jazykové verze a jazyková verze uživatelského rozhraní vlákna, ze kterého je vytvořeno nové vlákno.When a new thread is instantiated, its culture and UI culture are defined by the current system culture and UI culture, and not by the culture and UI culture of the thread from which the new thread is created. To znamená, že pokud je aktuální jazyková verze systému angličtina (USA) a aktuální jazyková verze vlákna primárního aplikace je francouzština (Francie), jazyková verze nového vlákna vytvořeného voláním konstruktoru Thread(ParameterizedThreadStart) z primárního vlákna je Angličtina (USA) a ne francouzština (Francie).This means, for example, that if the current system culture is English (United States) and the current culture of the primary application thread is French (France), the culture of a new thread created by calling the Thread(ParameterizedThreadStart) constructor from the primary thread is English (United States), and not French (France). Další informace naleznete v části "jazyková verze a vlákna" v tématu CultureInfo třídy.For more information, see the "Culture and threads" section of the CultureInfo class topic.

Důležité

To není pravdivé pro vlákna, která spouštějí asynchronní operace pro aplikace, které cílí na .NET Framework 4.6.NET Framework 4.6 a novější verze, v tomto případě je jazyková verze a jazyková verze uživatelského rozhraní součástí kontextu asynchronních operací; vlákno, na kterém je asynchronní operace spuštěna ve výchozím nastavení, zdědí jazykovou verzi a jazykovou verzi uživatelského rozhraní vlákna, ze kterého byla asynchronní operace spuštěna.This is not true of threads that execute asynchronous operations for apps that target the .NET Framework 4.6.NET Framework 4.6 and later versions, In this case, the culture and UI culture is part of an asynchronous operations' context; the thread on which an asynchronous operation executes by default inherits the culture and UI culture of the thread from which the asynchronous operation was launched. Další informace naleznete v části "jazyková verze a asynchronní operace založené na úlohách" v tématu třídy CultureInfo.For more information, see the "Culture and task-based asynchronous operations" section of the CultureInfo class topic.

Můžete provést jednu z následujících akcí, abyste zajistili, že všechna vlákna spuštěná v aplikaci sdílejí stejnou jazykovou verzi a jazykovou verzi uživatelského rozhraní:You can do either of the following to ensure that all of the threads executing in an application share the same culture and UI culture:

Další informace a příklady naleznete v části "jazyková verze a vlákna" v tématu CultureInfo třídy.For more information and examples, see the "Culture and threads" section of the CultureInfo class topic.

Získání informací o vláknech a jejich řízeníGetting information about and controlling threads

Můžete načíst několik hodnot vlastností, které poskytují informace o vlákně.You can retrieve a number of property values that provide information about a thread. V některých případech můžete také nastavit tyto hodnoty vlastností pro řízení provozu vlákna.In some cases, you can also set these property values to control the operation of the thread. Mezi tyto vlastnosti vlákna patří:These thread properties include:

  • Název.A name. Name je vlastnost jednou pro zápis, kterou můžete použít k identifikaci vlákna.Name is a write-once property that you can use to identify a thread. Výchozí hodnota je null.Its default value is null.

  • Kód hash, který lze načíst voláním metody GetHashCode.A hash code, which you can retrieve by calling the GetHashCode method. Kód hash lze použít k jednoznačné identifikaci vlákna; po dobu života vlákna se jeho kód hash nekoliduje s hodnotou z žádného jiného vlákna bez ohledu na doménu aplikace, ze které tuto hodnotu získáváte.The hash code can be used to uniquely identify a thread; for the lifetime of your thread, its hash code will not collide with the value from any other thread, regardless of the application domain from which you obtain the value.

  • ID vlákna.A thread ID. Hodnota vlastnosti ManagedThreadId jen pro čtení je přiřazena modulem runtime a jednoznačně identifikuje vlákno v rámci jeho procesu.The value of the read-only ManagedThreadId property is assigned by the runtime and uniquely identifies a thread within its process.

    Poznámka

    IDvlákna 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.An operating-system ThreadId has no fixed relationship to a managed thread, because an unmanaged host can control the relationship between managed and unmanaged threads. Konkrétně propracované hostitel může použít rozhraní API pro hostování rozhraní CLR k naplánování mnoha spravovaných vláken proti stejnému vláknu operačního systému nebo k přesunutí spravovaného vlákna mezi různými vlákny operačního systému.Specifically, a sophisticated host can use the CLR Hosting API to schedule many managed threads against the same operating system thread, or to move a managed thread between different operating system threads.

  • Aktuální stav vlákna.The thread's current state. Po dobu trvání existence je vlákno vždy v jednom nebo více stavech definovaných vlastností ThreadState.For the duration of its existence, a thread is always in one or more of the states defined by the ThreadState property.

  • Úroveň priority plánování, která je definována vlastností ThreadPriority.A scheduling priority level, which is defined by the ThreadPriority property. I když tuto hodnotu můžete nastavit tak, aby požadovala prioritu vlákna, není zaručena její obsluha operačním systémem.Although you can set this value to request a thread's priority, it is not guaranteed to be honored by the operating system.

  • Vlastnost IsThreadPoolThread jen pro čtení, která označuje, zda je vlákno vláknem fondu vláken.The read-only IsThreadPoolThread property, which indicates whether a thread is a thread pool thread.

  • Vlastnost IsBackground.The IsBackground property. Další informace naleznete v části vlákna v popředí a na pozadí .For more information, see the Foreground and background threads section.

Konstruktory

Thread(ParameterizedThreadStart)

Inicializuje novou instanci třídy Thread a určí delegáta, který umožňuje předání objektu do vlákna při spuštění vlákna.Initializes a new instance of the Thread class, specifying a delegate that allows an object to be passed to the thread when the thread is started.

Thread(ParameterizedThreadStart, Int32)

Inicializuje novou instanci třídy Thread, určení delegáta, který umožňuje předání objektu do vlákna při spuštění vlákna a určení maximální velikosti zásobníku pro vlákno.Initializes a new instance of the Thread class, specifying a delegate that allows an object to be passed to the thread when the thread is started and specifying the maximum stack size for the thread.

Thread(ThreadStart)

Inicializuje novou instanci třídy Thread.Initializes a new instance of the Thread class.

Thread(ThreadStart, Int32)

Inicializuje novou instanci třídy Thread a určí maximální velikost zásobníku pro vlákno.Initializes a new instance of the Thread class, specifying the maximum stack size for the thread.

Vlastnosti

ApartmentState

Získá nebo nastaví stav objektu Apartment tohoto vlákna.Gets or sets the apartment state of this thread.

CurrentContext

Získá aktuální kontext, ve kterém je vlákno prováděno.Gets the current context in which the thread is executing.

CurrentCulture

Získá nebo nastaví jazykovou verzi pro aktuální vlákno.Gets or sets the culture for the current thread.

CurrentPrincipal

Získá nebo nastaví aktuální objekt zabezpečení vlákna (u zabezpečení založeného na rolích).Gets or sets the thread's current principal (for role-based security).

CurrentThread

Načte aktuálně spuštěné vlákno.Gets the currently running thread.

CurrentUICulture

Získá nebo nastaví aktuální jazykovou verzi používanou Správce prostředků k vyhledání prostředků specifických pro jazykovou verzi za běhu.Gets or sets the current culture used by the Resource Manager to look up culture-specific resources at run time.

ExecutionContext

Získá objekt ExecutionContext, který obsahuje informace o různých kontextech aktuálního vlákna.Gets an ExecutionContext object that contains information about the various contexts of the current thread.

IsAlive

Získá hodnotu označující stav spuštění aktuálního vlákna.Gets a value indicating the execution status of the current thread.

IsBackground

Získá nebo nastaví hodnotu označující, zda se jedná o vlákno na pozadí.Gets or sets a value indicating whether or not a thread is a background thread.

IsThreadPoolThread

Načte hodnotu, která označuje, zda vlákno patří do spravovaného fondu vláken.Gets a value indicating whether or not a thread belongs to the managed thread pool.

ManagedThreadId

Získá jedinečný identifikátor pro aktuální spravované vlákno.Gets a unique identifier for the current managed thread.

Name

Získá nebo nastaví název vlákna.Gets or sets the name of the thread.

Priority

Získává nebo nastavuje hodnotu, která indikuje prioritu plánování vlákna.Gets or sets a value indicating the scheduling priority of a thread.

ThreadState

Získá hodnotu obsahující stavy aktuálního vlákna.Gets a value containing the states of the current thread.

Metody

Abort()

Vyvolá ThreadAbortException ve vlákně, ve kterém je vyvolána, aby bylo možné zahájit proces ukončení vlákna.Raises a ThreadAbortException in the thread on which it is invoked, to begin the process of terminating the thread. Volání této metody obvykle ukončí vlákno.Calling this method usually terminates the thread.

Abort(Object)

Vyvolá ThreadAbortException ve vlákně, ve kterém je vyvolána, aby bylo možné zahájit proces ukončení vlákna a zároveň poskytnout informace o výjimce týkající se ukončení vlákna.Raises a ThreadAbortException in the thread on which it is invoked, to begin the process of terminating the thread while also providing exception information about the thread termination. Volání této metody obvykle ukončí vlákno.Calling this method usually terminates the thread.

AllocateDataSlot()

Přidělí nepojmenované datové sloty na všechna vlákna.Allocates an unnamed data slot on all the threads. Pro lepší výkon použijte pole, která jsou označena atributem ThreadStaticAttribute.For better performance, use fields that are marked with the ThreadStaticAttribute attribute instead.

AllocateNamedDataSlot(String)

Přidělí pojmenovaný datový slot ve všech vláknech.Allocates a named data slot on all threads. Pro lepší výkon použijte pole, která jsou označena atributem ThreadStaticAttribute.For better performance, use fields that are marked with the ThreadStaticAttribute attribute instead.

BeginCriticalRegion()

Upozorňuje hostitele, že se chystá zadat oblast kódu, ve které důsledky přerušení vlákna nebo neošetřené výjimce mohou ohrozit jiné úkoly v doméně aplikace.Notifies a host that execution is about to enter a region of code in which the effects of a thread abort or unhandled exception might jeopardize other tasks in the application domain.

BeginThreadAffinity()

Upozorňuje hostitele, že spravovaný kód bude provádět instrukce, které závisí na identitě aktuálního fyzického vlákna operačního systému.Notifies a host that managed code is about to execute instructions that depend on the identity of the current physical operating system thread.

DisableComObjectEagerCleanup()

Vypne automatické vyčištění vyRCWch obálek za běhu pro aktuální vlákno.Turns off automatic cleanup of runtime callable wrappers (RCW) for the current thread.

EndCriticalRegion()

Upozorňuje hostitele, že se o tom, že spuštění chystá, zadat oblast kódu, ve které se účinky přerušení vlákna nebo Neošetřená výjimka omezí na aktuální úkol.Notifies a host that execution is about to enter a region of code in which the effects of a thread abort or unhandled exception are limited to the current task.

EndThreadAffinity()

Upozorňuje hostitele, že spravovaný kód dokončil provádění pokynů, které závisí na identitě aktuálního fyzického vlákna operačního systému.Notifies a host that managed code has finished executing instructions that depend on the identity of the current physical operating system thread.

Equals(Object)

Určuje, zda se zadaný objekt rovná aktuálnímu objektu.Determines whether the specified object is equal to the current object.

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

Zajišťuje, aby prostředky byly uvolněny a jiné operace čištění byly provedeny, když systém uvolňování paměti znovu získá objekt Thread.Ensures that resources are freed and other cleanup operations are performed when the garbage collector reclaims the Thread object.

FreeNamedDataSlot(String)

Eliminuje přidružení mezi názvem a slotem pro všechna vlákna v procesu.Eliminates the association between a name and a slot, for all threads in the process. Pro lepší výkon použijte pole, která jsou označena atributem ThreadStaticAttribute.For better performance, use fields that are marked with the ThreadStaticAttribute attribute instead.

GetApartmentState()

Vrací hodnotu ApartmentState určující stav objektu apartment.Returns an ApartmentState value indicating the apartment state.

GetCompressedStack()

Vrátí objekt CompressedStack, který lze použít k zachycení zásobníku pro aktuální vlákno.Returns a CompressedStack object that can be used to capture the stack for the current thread.

GetCurrentProcessorId()

Získá ID, které určuje, na kterém procesoru je aktuální vlákno spuštěno.Gets an ID used to indicate on which processor the current thread is executing.

GetData(LocalDataStoreSlot)

Načte hodnotu ze zadaného slotu v aktuálním vlákně v aktuální doméně aktuálního vlákna.Retrieves the value from the specified slot on the current thread, within the current thread's current domain. Pro lepší výkon použijte pole, která jsou označena atributem ThreadStaticAttribute.For better performance, use fields that are marked with the ThreadStaticAttribute attribute instead.

GetDomain()

Vrátí aktuální doménu, ve které je spuštěno aktuální vlákno.Returns the current domain in which the current thread is running.

GetDomainID()

Vrací jedinečný identifikátor domény aplikace.Returns a unique application domain identifier.

GetHashCode()

Vrátí hodnotu hash aktuálního vlákna.Returns a hash code for the current thread.

GetNamedDataSlot(String)

Vyhledá pojmenovanou datovou oblast.Looks up a named data slot. Pro lepší výkon použijte pole, která jsou označena atributem ThreadStaticAttribute.For better performance, use fields that are marked with the ThreadStaticAttribute attribute instead.

GetType()

Type Získá aktuální instanci.Gets the Type of the current instance.

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

Přeruší vlákno, které je ve stavu WaitSleepJoin vlákna.Interrupts a thread that is in the WaitSleepJoin thread state.

Join()

Blokuje volající vlákno, dokud vlákno reprezentované touto instancí nekončí, a přitom pokračuje v provádění standardních SendMessagech pump a modelů COM.Blocks the calling thread until the thread represented by this instance terminates, while continuing to perform standard COM and SendMessage pumping.

Join(Int32)

Blokuje volající vlákno, dokud vlákno reprezentované touto instancí nekončí nebo zadaný čas uplynul, a přitom pokračuje v provádění standardních prostředků COM a SendMessage.Blocks the calling thread until the thread represented by this instance terminates or the specified time elapses, while continuing to perform standard COM and SendMessage pumping.

Join(TimeSpan)

Blokuje volající vlákno, dokud vlákno reprezentované touto instancí nekončí nebo zadaný čas uplynul, a přitom pokračuje v provádění standardních prostředků COM a SendMessage.Blocks the calling thread until the thread represented by this instance terminates or the specified time elapses, while continuing to perform standard COM and SendMessage pumping.

MemberwiseClone()

Vytvoří kopii aktuálního Objectseznamu.Creates a shallow copy of the current 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 přístup k paměti před voláním MemoryBarrier() prováděl po přístupu k paměti, které následují po volání MemoryBarrier().Synchronizes memory access as follows: The processor executing the current thread cannot reorder instructions in such a way that memory accesses prior to the call to MemoryBarrier() execute after memory accesses that follow the call to MemoryBarrier().

ResetAbort()

Zruší Abort(Object) požadovanou pro aktuální vlákno.Cancels an Abort(Object) requested for the current thread.

Resume()

Obnoví podproces, který byl pozastaven.Resumes a thread that has been suspended.

SetApartmentState(ApartmentState)

Nastaví stav objektu apartment vlákna před jeho spuštěním.Sets the apartment state of a thread before it is started.

SetCompressedStack(CompressedStack)

Použije zachycené CompressedStack k aktuálnímu vláknu.Applies a captured CompressedStack to the current thread.

SetData(LocalDataStoreSlot, Object)

Nastaví data v určeném slotu v aktuálně běžícím vlákně pro aktuální doménu tohoto vlákna.Sets the data in the specified slot on the currently running thread, for that thread's current domain. Pro lepší výkon použijte místo toho pole označená atributem ThreadStaticAttribute.For better performance, use fields marked with the ThreadStaticAttribute attribute instead.

Sleep(Int32)

Pozastaví aktuální vlákno na zadaný počet milisekund.Suspends the current thread for the specified number of milliseconds.

Sleep(TimeSpan)

Pozastaví aktuální vlákno na určenou dobu.Suspends the current thread for the specified amount of time.

SpinWait(Int32)

Způsobí, že vlákno počká na počet pokusů definovaných parametrem iterations.Causes a thread to wait the number of times defined by the iterations parameter.

Start()

Způsobí, že operační systém změní stav aktuální instance na Running.Causes the operating system to change the state of the current instance to Running.

Start(Object)

Způsobí, že operační systém změní stav aktuální instance na Running a volitelně poskytne objekt obsahující data, která mají být použita metodou, kterou vlákno provádí.Causes the operating system to change the state of the current instance to Running, and optionally supplies an object containing data to be used by the method the thread executes.

Suspend()

Buď pozastaví vlákno, nebo pokud je vlákno již pozastaveno, nemá žádný vliv.Either suspends the thread, or if the thread is already suspended, has no effect.

ToString()

Vrací řetězec, který představuje aktuální objekt.Returns a string that represents the current object.

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

Nastaví stav objektu apartment vlákna před jeho spuštěním.Sets the apartment state of a thread before it is started.

VolatileRead(Byte)

Přečte hodnotu pole.Reads the value of a field. Hodnota je nejnovější napsaný libovolným procesorem v počítači, a to bez ohledu na počet procesorů nebo stav mezipaměti procesoru.The value is the latest written by any processor in a computer, regardless of the number of processors or the state of processor cache.

VolatileRead(Double)

Přečte hodnotu pole.Reads the value of a field. Hodnota je nejnovější napsaný libovolným procesorem v počítači, a to bez ohledu na počet procesorů nebo stav mezipaměti procesoru.The value is the latest written by any processor in a computer, regardless of the number of processors or the state of processor cache.

VolatileRead(Int16)

Přečte hodnotu pole.Reads the value of a field. Hodnota je nejnovější napsaný libovolným procesorem v počítači, a to bez ohledu na počet procesorů nebo stav mezipaměti procesoru.The value is the latest written by any processor in a computer, regardless of the number of processors or the state of processor cache.

VolatileRead(Int32)

Přečte hodnotu pole.Reads the value of a field. Hodnota je nejnovější napsaný libovolným procesorem v počítači, a to bez ohledu na počet procesorů nebo stav mezipaměti procesoru.The value is the latest written by any processor in a computer, regardless of the number of processors or the state of processor cache.

VolatileRead(Int64)

Přečte hodnotu pole.Reads the value of a field. Hodnota je nejnovější napsaný libovolným procesorem v počítači, a to bez ohledu na počet procesorů nebo stav mezipaměti procesoru.The value is the latest written by any processor in a computer, regardless of the number of processors or the state of processor cache.

VolatileRead(IntPtr)

Přečte hodnotu pole.Reads the value of a field. Hodnota je nejnovější napsaný libovolným procesorem v počítači, a to bez ohledu na počet procesorů nebo stav mezipaměti procesoru.The value is the latest written by any processor in a computer, regardless of the number of processors or the state of processor cache.

VolatileRead(Object)

Přečte hodnotu pole.Reads the value of a field. Hodnota je nejnovější napsaný libovolným procesorem v počítači, a to bez ohledu na počet procesorů nebo stav mezipaměti procesoru.The value is the latest written by any processor in a computer, regardless of the number of processors or the state of processor cache.

VolatileRead(SByte)

Přečte hodnotu pole.Reads the value of a field. Hodnota je nejnovější napsaný libovolným procesorem v počítači, a to bez ohledu na počet procesorů nebo stav mezipaměti procesoru.The value is the latest written by any processor in a computer, regardless of the number of processors or the state of processor cache.

VolatileRead(Single)

Přečte hodnotu pole.Reads the value of a field. Hodnota je nejnovější napsaný libovolným procesorem v počítači, a to bez ohledu na počet procesorů nebo stav mezipaměti procesoru.The value is the latest written by any processor in a computer, regardless of the number of processors or the state of processor cache.

VolatileRead(UInt16)

Přečte hodnotu pole.Reads the value of a field. Hodnota je nejnovější napsaný libovolným procesorem v počítači, a to bez ohledu na počet procesorů nebo stav mezipaměti procesoru.The value is the latest written by any processor in a computer, regardless of the number of processors or the state of processor cache.

VolatileRead(UInt32)

Přečte hodnotu pole.Reads the value of a field. Hodnota je nejnovější napsaný libovolným procesorem v počítači, a to bez ohledu na počet procesorů nebo stav mezipaměti procesoru.The value is the latest written by any processor in a computer, regardless of the number of processors or the state of processor cache.

VolatileRead(UInt64)

Přečte hodnotu pole.Reads the value of a field. Hodnota je nejnovější napsaný libovolným procesorem v počítači, a to bez ohledu na počet procesorů nebo stav mezipaměti procesoru.The value is the latest written by any processor in a computer, regardless of the number of processors or the state of processor cache.

VolatileRead(UIntPtr)

Přečte hodnotu pole.Reads the value of a field. Hodnota je nejnovější napsaný libovolným procesorem v počítači, a to bez ohledu na počet procesorů nebo stav mezipaměti procesoru.The value is the latest written by any processor in a computer, regardless of the number of processors or the state of processor cache.

VolatileWrite(Byte, Byte)

Okamžitě zapíše hodnotu do pole, aby byla hodnota viditelná pro všechny procesory v počítači.Writes a value to a field immediately, so that the value is visible to all processors in the computer.

VolatileWrite(Double, Double)

Okamžitě zapíše hodnotu do pole, aby byla hodnota viditelná pro všechny procesory v počítači.Writes a value to a field immediately, so that the value is visible to all processors in the computer.

VolatileWrite(Int16, Int16)

Okamžitě zapíše hodnotu do pole, aby byla hodnota viditelná pro všechny procesory v počítači.Writes a value to a field immediately, so that the value is visible to all processors in the computer.

VolatileWrite(Int32, Int32)

Okamžitě zapíše hodnotu do pole, aby byla hodnota viditelná pro všechny procesory v počítači.Writes a value to a field immediately, so that the value is visible to all processors in the computer.

VolatileWrite(Int64, Int64)

Okamžitě zapíše hodnotu do pole, aby byla hodnota viditelná pro všechny procesory v počítači.Writes a value to a field immediately, so that the value is visible to all processors in the computer.

VolatileWrite(IntPtr, IntPtr)

Okamžitě zapíše hodnotu do pole, aby byla hodnota viditelná pro všechny procesory v počítači.Writes a value to a field immediately, so that the value is visible to all processors in the computer.

VolatileWrite(Object, Object)

Okamžitě zapíše hodnotu do pole, aby byla hodnota viditelná pro všechny procesory v počítači.Writes a value to a field immediately, so that the value is visible to all processors in the computer.

VolatileWrite(SByte, SByte)

Okamžitě zapíše hodnotu do pole, aby byla hodnota viditelná pro všechny procesory v počítači.Writes a value to a field immediately, so that the value is visible to all processors in the computer.

VolatileWrite(Single, Single)

Okamžitě zapíše hodnotu do pole, aby byla hodnota viditelná pro všechny procesory v počítači.Writes a value to a field immediately, so that the value is visible to all processors in the computer.

VolatileWrite(UInt16, UInt16)

Okamžitě zapíše hodnotu do pole, aby byla hodnota viditelná pro všechny procesory v počítači.Writes a value to a field immediately, so that the value is visible to all processors in the computer.

VolatileWrite(UInt32, UInt32)

Okamžitě zapíše hodnotu do pole, aby byla hodnota viditelná pro všechny procesory v počítači.Writes a value to a field immediately, so that the value is visible to all processors in the computer.

VolatileWrite(UInt64, UInt64)

Okamžitě zapíše hodnotu do pole, aby byla hodnota viditelná pro všechny procesory v počítači.Writes a value to a field immediately, so that the value is visible to all processors in the computer.

VolatileWrite(UIntPtr, UIntPtr)

Okamžitě zapíše hodnotu do pole, aby byla hodnota viditelná pro všechny procesory v počítači.Writes a value to a field immediately, so that the value is visible to all processors in the computer.

Yield()

Způsobí, že volající vlákno zaznamená provádění do jiného vlákna, které je připraveno ke spuštění na aktuálním procesoru.Causes the calling thread to yield execution to another thread that is ready to run on the current processor. Operační systém vybere vlákno, které se má získat.The operating system selects the thread to yield to.

Explicitní implementace rozhraní

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

Mapuje sadu názvů na odpovídající sadu identifikátorů pro rozesílání.Maps a set of names to a corresponding set of dispatch identifiers.

_Thread.GetTypeInfo(UInt32, UInt32, IntPtr)

Načte informace o typu objektu, který lze použít k získání informací o typu pro rozhraní.Retrieves the type information for an object, which can then be used to get the type information for an interface.

_Thread.GetTypeInfoCount(UInt32)

Získá počet rozhraní typu informací, které objekt poskytuje (0 nebo 1).Retrieves the number of type information interfaces that an object provides (either 0 or 1).

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

Poskytuje přístup k vlastnostem a metodám vystaveným objektem.Provides access to properties and methods exposed by an object.

Platí pro

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

Tento typ je bezpečný pro přístup z více vláken.This type is thread safe.

Viz také