Thread.Priority Property


The .NET API Reference documentation has a new home. Visit the .NET API Browser on to see the new experience.

Gets or sets a value indicating the scheduling priority of a thread.

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

public ThreadPriority Priority {
	[HostProtectionAttribute(SecurityAction.LinkDemand, SelfAffectingThreading = true)]

Property Value

Type: System.Threading.ThreadPriority

One of the ThreadPriority values. The default value is ThreadPriority.Normal.

Exception Condition

The thread has reached a final state, such as Aborted.


The value specified for a set operation is not a valid ThreadPriority value.

A thread can be assigned any one of the following priority ThreadPriority values:

  • Highest

  • AboveNormal

  • Normal

  • BelowNormal

  • Lowest

Operating systems are not required to honor the priority of a thread.

The following example shows the result of changing the priority of a thread. Three threads are created, the priority of one thread is set to ThreadPriority.BelowNormal, and the priority of a second is set to ThreadPriority.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;

        // Allow counting for 10 seconds.
        priorityTest.LoopSwitch = false;

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

    public PriorityTest()
        loopSwitch = true;

    public bool LoopSwitch
        set{ loopSwitch = value; }

    public void ThreadMethod()
        Console.WriteLine("{0,-11} with {1,11} priority " +
            "has a count = {2,13}", Thread.CurrentThread.Name, 
// 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

.NET Framework
Available since 1.1
Return to top