This documentation is archived and is not being maintained.

ThreadPriority Enumeration

Specifies the scheduling priority of a Thread.

Namespace: System.Threading
Assembly: mscorlib (in mscorlib.dll)

public enum class ThreadPriority
/** @attribute SerializableAttribute() */ 
/** @attribute ComVisibleAttribute(true) */ 
public enum ThreadPriority
public enum ThreadPriority

 Member nameDescription
Supported by the .NET Compact FrameworkAboveNormalThe Thread can be scheduled after threads with Highest priority and before those with Normal priority. 
Supported by the .NET Compact FrameworkBelowNormalThe Thread can be scheduled after threads with Normal priority and before those with Lowest priority. 
Supported by the .NET Compact FrameworkHighestThe Thread can be scheduled before threads with any other priority. 
Supported by the .NET Compact FrameworkLowestThe Thread can be scheduled after threads with any other priority. 
Supported by the .NET Compact FrameworkNormalThe Thread can be scheduled after threads with AboveNormal priority and before those with BelowNormal priority. Threads have Normal priority by default. 

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.

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.

using namespace System;
using namespace System::Threading;
ref class PriorityTest
   bool loopSwitch;

      loopSwitch = true;

   property bool LoopSwitch 
      void set( bool value )
         loopSwitch = value;

   void ThreadMethod()
      __int64 threadCount = 0;
      while ( loopSwitch )

      Console::WriteLine( "{0} with {1,11} priority "
      "has a count = {2,13}", Thread::CurrentThread->Name, Thread::CurrentThread->Priority.ToString(), threadCount.ToString(  "N0" ) );


int main()
   PriorityTest^ priorityTest = gcnew PriorityTest;
   ThreadStart^ startDelegate = gcnew ThreadStart( priorityTest, &PriorityTest::ThreadMethod );
   Thread^ threadOne = gcnew Thread( startDelegate );
   threadOne->Name =  "ThreadOne";
   Thread^ threadTwo = gcnew Thread( startDelegate );
   threadTwo->Name =  "ThreadTwo";
   threadTwo->Priority = ThreadPriority::BelowNormal;
   // Allow counting for 10 seconds.
   Thread::Sleep( 10000 );
   priorityTest->LoopSwitch = false;

import System.*;
import System.Threading.*;
import System.Threading.Thread;

class Test
    public static void main(String[] args)
        PriorityTest priorityTest = new PriorityTest();
        ThreadStart startDelegate = new ThreadStart(priorityTest.ThreadMethod);
        Thread threadOne = new Thread(startDelegate);


        Thread threadTwo = new Thread(startDelegate);


        // Allow counting for 10 seconds.
    } //main
} //Test

class PriorityTest
    private boolean loopSwitch;

    public PriorityTest()
        loopSwitch = true;
    } //PriorityTest

    /** @property 
    public void set_LoopSwitch(boolean value)
        loopSwitch = value;
    } //set_LoopSwitch

    public void ThreadMethod()
        long threadCount = 0;

        while (loopSwitch) {

        Console.WriteLine("{0} with {1,11} priority " + "has a count = {2,13}",
    } //ThreadMethod
} //PriorityTest

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see System Requirements.

.NET Framework

Supported in: 2.0, 1.1, 1.0

.NET Compact Framework

Supported in: 2.0, 1.0