Note

Access to this page requires authorization. You can try signing in or .

Access to this page requires authorization. You can try .

ThreadPriority Enum

Definition

Namespace:
System.Threading
Assemblies:
netstandard.dll, System.Threading.Thread.dll
Assembly:
System.Threading.Thread.dll
Assembly:
mscorlib.dll
Assembly:
netstandard.dll
Source:
ThreadPriority.cs
Source:
ThreadPriority.cs
Source:
EnumerableHelpers.cs

Important

Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.

Specifies the scheduling priority of a Thread.

public enum class ThreadPriority
public enum ThreadPriority
[System.Serializable]
public enum ThreadPriority
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public enum ThreadPriority
type ThreadPriority = 
[<System.Serializable>]
type ThreadPriority = 
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type ThreadPriority = 
Public Enum ThreadPriority
Inheritance
ThreadPriority
Attributes

Fields

Name Value Description
Lowest 0

The Thread can be scheduled after threads with any other priority.

BelowNormal 1

The Thread can be scheduled after threads with Normal priority and before those with Lowest priority.

Normal 2

The Thread can be scheduled after threads with AboveNormal priority and before those with BelowNormal priority. Threads have Normal priority by default.

AboveNormal 3

The Thread can be scheduled after threads with Highest priority and before those with Normal priority.

Highest 4

The Thread can be scheduled before threads with any other priority.

Examples

The following code example shows the result of changing the priority of a thread. Three threads are created, the priority of one thread is set to BelowNormal, and the priority of a second is set to AboveNormal. Each thread increments a variable in a while loop and runs for a set time.

using System;
using System.Threading;
using Timers = System.Timers;

class Test
{
 static void Main()
 {
 PriorityTest priorityTest = new PriorityTest();

 Thread thread1 = new Thread(priorityTest.ThreadMethod);
 thread1.Name = "ThreadOne";
 Thread thread2 = new Thread(priorityTest.ThreadMethod);
 thread2.Name = "ThreadTwo";
 thread2.Priority = ThreadPriority.BelowNormal;
 Thread thread3 = new Thread(priorityTest.ThreadMethod);
 thread3.Name = "ThreadThree";
 thread3.Priority = ThreadPriority.AboveNormal;

 thread1.Start();
 thread2.Start();
 thread3.Start();
 // Allow counting for 10 seconds.
 Thread.Sleep(10000);
 priorityTest.LoopSwitch = false;
 }
}

class PriorityTest
{
 static volatile bool loopSwitch;
 [ThreadStatic] static long threadCount = 0;

 public PriorityTest()
 {
 loopSwitch = true;
 }

 public bool LoopSwitch
 {
 set{ loopSwitch = value; }
 }

 public void ThreadMethod()
 {
 while(loopSwitch)
 {
 threadCount++;
 }
 Console.WriteLine("{0,-11} with {1,11} priority " +
 "has a count = {2,13}", Thread.CurrentThread.Name, 
 Thread.CurrentThread.Priority.ToString(), 
 threadCount.ToString("N0")); 
 }
}
// The example displays output like the following:
// ThreadOne with Normal priority has a count = 755,897,581
// ThreadThree with AboveNormal priority has a count = 778,099,094
// ThreadTwo with BelowNormal priority has a count = 7,840,984
Imports System.Threading
Imports Timers = System.Timers

Public Module Example
 Dim t As Timers.Timer
 Private priorityTest As New PriorityTest()

 Public Sub Main()
 Dim thread1 As New Thread(AddressOf priorityTest.ThreadMethod)
 thread1.Name = "ThreadOne"
 Dim thread2 As New Thread(AddressOf priorityTest.ThreadMethod)
 thread2.Name = "ThreadTwo"
 thread2.Priority = ThreadPriority.BelowNormal
 Dim thread3 As New Thread(AddressOf priorityTest.ThreadMethod)
 thread3.Name = "ThreadThree"
 thread3.Priority = ThreadPriority.AboveNormal
 thread1.Start()
 thread2.Start()
 thread3.Start()

 ' Allow threads to execute for about 10 seconds.
 t = New Timers.Timer()
 t.AutoReset = False
 t.Interval = 10000
 AddHandler t.Elapsed, AddressOf Elapsed
 t.Start()
 End Sub

 Private Sub Elapsed(sender As Object, e As Timers.ElapsedEventArgs)
 priorityTest.LoopSwitch = False
 End Sub
End Module

Public Class PriorityTest
 Private Shared loopSwitchValue As Boolean
 <ThreadStatic> Shared threadCount As Long

 Sub New()
 loopSwitchValue = True
 End Sub

 WriteOnly Property LoopSwitch As Boolean
 Set
 loopSwitchValue = Value
 End Set
 End Property

 Sub ThreadMethod()
 Do While True
 threadCount += 1
 If Not loopSwitchValue Then Exit Do
 Loop

 Console.WriteLine("{0,-11} with {1,11} priority " &
 "has a count = {2,13}", Thread.CurrentThread.Name,
 Thread.CurrentThread.Priority.ToString(),
 threadCount.ToString("N0")) 
 End Sub
End Class
' The example displays the following output:
' ThreadOne with Normal priority has a count = 755,897,581
' ThreadThree with AboveNormal priority has a count = 778,099,094
' ThreadTwo with BelowNormal priority has a count = 7,840,984

Remarks

ThreadPriority defines the set of all possible values for a thread priority. Thread priorities specify the relative priority of one thread versus another.

Every thread has an assigned priority. Threads created within the runtime are initially assigned the Normal priority, while threads created outside the runtime retain their previous priority when they enter the runtime. You can get and set the priority of a thread by accessing its Priority property.

Threads are scheduled for execution based on their priority. The scheduling algorithm used to determine the order of thread execution varies with each operating system. The operating system can also adjust the thread priority dynamically as the user interface's focus is moved between the foreground and the background.

The priority of a thread does not affect the thread's state; the state of the thread must be Running before the operating system can schedule it.

Applies to

See also


Feedback

Was this page helpful?