Priority Property

Thread.Priority Property


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. It creates three threads, sets the priority of one thread to ThreadPriority.BelowNormal, and sets the priority of a second thread to QueuePriority.AboveNormal. The threads increment a per-thread counter variable in a while loop and run for approximately 10 seconds.

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()
//        long threadCount = 0;

        Console.WriteLine("{0,-11} with {1,11} priority " +
            "has a count = {2,13}", Thread.CurrentThread.Name, 
// The example displays output like the following:
//    ThreadThree with AboveNormal priority has a count = 1,590,217,458
//    ThreadTwo   with BelowNormal priority has a count = 1,590,439,824
//    ThreadOne   with      Normal priority has a count = 1,594,502,060

.NET Framework
Available since 1.1
Return to top
© 2015 Microsoft