Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Export (0) Print
Expand All

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 { get; set; }

Property Value

Type: System.Threading.ThreadPriority
One of the ThreadPriority values. The default value is ThreadPriority.Normal.

ExceptionCondition
ThreadStateException

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

ArgumentException

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;

        thread1.Start();
        thread2.Start();
        thread3.Start();
        // Allow counting for 10 seconds.
        Thread.Sleep(10000);
        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; 

        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: 
//    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

Supported in: 4.6, 4.5, 4, 3.5, 3.0, 2.0, 1.1

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

XNA Framework

Supported in: 3.0, 2.0, 1.0
Show:
© 2015 Microsoft