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