ThreadPriority Enumeration
Specifies the scheduling priority of a Thread.
[Visual Basic] <Serializable> Public Enum ThreadPriority [C#] [Serializable] public enum ThreadPriority [C++] [Serializable] __value public enum ThreadPriority [JScript] public Serializable enum ThreadPriority
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.
Members
| Member name | Description |
|---|---|
| AboveNormal Supported by the .NET Compact Framework. | The Thread can be scheduled after threads with Highest priority and before those with Normal priority. |
| BelowNormal Supported by the .NET Compact Framework. | The Thread can be scheduled after threads with Normal priority and before those with Lowest priority. |
| Highest Supported by the .NET Compact Framework. | The Thread can be scheduled before threads with any other priority. |
| Lowest Supported by the .NET Compact Framework. | The Thread can be scheduled after threads with any other priority. |
| Normal Supported by the .NET Compact Framework. | The Thread can be scheduled after threads with AboveNormal priority and before those with BelowNormal priority. Threads have Normal priority by default. |
Example
[Visual Basic, C#, C++] The following code example shows the result of changing the priority of a thread. Two threads are created and the priority of one thread is set to BelowNormal. Both threads increment a variable in a while loop and run for a set time.
[Visual Basic] Option Explicit Option Strict Imports System Imports System.Threading Public Class Test Shared Sub Main() Dim priorityTest As New PriorityTest() Dim threadOne As Thread = _ New Thread(AddressOf priorityTest.ThreadMethod) threadOne.Name = "ThreadOne" Dim threadTwo As Thread = _ New Thread(AddressOf priorityTest.ThreadMethod) threadTwo.Name = "ThreadTwo" threadTwo.Priority = ThreadPriority.BelowNormal threadOne.Start() threadTwo.Start() ' Allow counting for 10 seconds. Thread.Sleep(10000) priorityTest.LoopSwitch = False End Sub End Class Public Class PriorityTest Dim loopSwitchValue As Boolean Sub New() loopSwitchValue = True End Sub WriteOnly Property LoopSwitch As Boolean Set loopSwitchValue = Value End Set End Property Sub ThreadMethod() Dim threadCount As Long = 0 While loopSwitchValue threadCount += 1 End While Console.WriteLine("{0} with {1,11} priority " & _ "has a count = {2,13}", Thread.CurrentThread.Name, _ Thread.CurrentThread.Priority.ToString(), _ threadCount.ToString("N0")) End Sub End Class [C#] using System; using System.Threading; class Test { static void Main() { PriorityTest priorityTest = new PriorityTest(); ThreadStart startDelegate = new ThreadStart(priorityTest.ThreadMethod); Thread threadOne = new Thread(startDelegate); threadOne.Name = "ThreadOne"; Thread threadTwo = new Thread(startDelegate); threadTwo.Name = "ThreadTwo"; threadTwo.Priority = ThreadPriority.BelowNormal; threadOne.Start(); threadTwo.Start(); // Allow counting for 10 seconds. Thread.Sleep(10000); priorityTest.LoopSwitch = false; } } class PriorityTest { bool loopSwitch; public PriorityTest() { loopSwitch = true; } public bool LoopSwitch { set{ loopSwitch = value; } } public void ThreadMethod() { long threadCount = 0; while(loopSwitch) { threadCount++; } Console.WriteLine("{0} with {1,11} priority " + "has a count = {2,13}", Thread.CurrentThread.Name, Thread.CurrentThread.Priority.ToString(), threadCount.ToString("N0")); } } [C++] #using <mscorlib.dll> using namespace System; using namespace System::Threading; __gc class PriorityTest { bool loopSwitch; public: PriorityTest() { loopSwitch = true; } __property void set_LoopSwitch(bool value) { loopSwitch = value; } void ThreadMethod() { __int64 threadCount = 0; while(loopSwitch) { threadCount++; } Console::WriteLine(S"{0} with {1,11} priority " S"has a count = {2,13}", Thread::CurrentThread->Name, __box(Thread::CurrentThread->Priority)->ToString(), threadCount.ToString("N0")); } }; void main() { PriorityTest* priorityTest = new PriorityTest(); ThreadStart* startDelegate = new ThreadStart(priorityTest, &PriorityTest::ThreadMethod); Thread* threadOne = new Thread(startDelegate); threadOne->Name = "ThreadOne"; Thread* threadTwo = new Thread(startDelegate); threadTwo->Name = "ThreadTwo"; threadTwo->Priority = ThreadPriority::BelowNormal; threadOne->Start(); threadTwo->Start(); // Allow counting for 10 seconds. Thread::Sleep(10000); priorityTest->LoopSwitch = false; }
[JScript] No example is available for JScript. To view a Visual Basic, C#, or C++ example, click the Language Filter button
in the upper-left corner of the page.
Requirements
Namespace: System.Threading
Platforms: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 family, .NET Compact Framework
Assembly: Mscorlib (in Mscorlib.dll)
See Also
System.Threading Namespace | Thread | Scheduling Threads | Managed and Unmanaged Threading