Export (0) Print
Expand All

Thread.Priority Property

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

[Visual Basic]
Public Property Priority As ThreadPriority
[C#]
public ThreadPriority Priority {get; set;}
[C++]
public: __property ThreadPriority get_Priority();
public: __property void set_Priority(ThreadPriority);
[JScript]
public function get Priority() : ThreadPriority;
public function set Priority(ThreadPriority);

Property Value

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

Exceptions

Exception Type Condition
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.

Remarks

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

  • Highest
  • AboveNormal
  • Normal
  • BelowNormal
  • Lowest

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

Example

[Visual Basic, C#, C++] 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.

[Visual Basic] 
Option Explicit
Option Strict

Imports System
Imports System.Threading

Public Class Test

    Shared Sub Main()
        Dim priorityTest As New PriorityTest()

        Dim threadOne As Thread = _
            New Thread(AddressOf priorityTest.ThreadMethod)
        threadOne.Name = "ThreadOne"
        Dim threadTwo As Thread = _
            New Thread(AddressOf priorityTest.ThreadMethod)
        threadTwo.Name = "ThreadTwo"

        threadTwo.Priority = ThreadPriority.BelowNormal
        threadOne.Start()
        threadTwo.Start()

        ' Allow counting for 10 seconds.
        Thread.Sleep(10000)
        priorityTest.LoopSwitch = False
    End Sub

End Class

Public Class PriorityTest

    Dim loopSwitchValue As Boolean 

    Sub New()
        loopSwitchValue = True
    End Sub

    WriteOnly Property LoopSwitch As Boolean
        Set
            loopSwitchValue = Value
        End Set
    End Property

    Sub ThreadMethod()
        Dim threadCount As Long = 0

        While loopSwitchValue
            threadCount += 1
        End While
        
        Console.WriteLine("{0} with {1,11} priority " & _
            "has a count = {2,13}", Thread.CurrentThread.Name, _
            Thread.CurrentThread.Priority.ToString(), _
            threadCount.ToString("N0")) 
    End Sub

End Class

[C#] 
using System;
using System.Threading;

class Test
{
    static void Main()
    {
        PriorityTest priorityTest = new PriorityTest();
        ThreadStart startDelegate = 
            new ThreadStart(priorityTest.ThreadMethod);

        Thread threadOne = new Thread(startDelegate);
        threadOne.Name = "ThreadOne";
        Thread threadTwo = new Thread(startDelegate);
        threadTwo.Name = "ThreadTwo";

        threadTwo.Priority = ThreadPriority.BelowNormal;
        threadOne.Start();
        threadTwo.Start();

        // Allow counting for 10 seconds.
        Thread.Sleep(10000);
        priorityTest.LoopSwitch = false;
    }
}

class PriorityTest
{
    bool loopSwitch;

    public PriorityTest()
    {
        loopSwitch = true;
    }

    public bool LoopSwitch
    {
        set{ loopSwitch = value; }
    }

    public void ThreadMethod()
    {
        long threadCount = 0;

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

[C++] 
#using <mscorlib.dll>
using namespace System;
using namespace System::Threading;

__gc class PriorityTest
{
    bool loopSwitch;

public:
    PriorityTest()
    {
        loopSwitch = true;
    }

    __property void set_LoopSwitch(bool value)
    {
        loopSwitch = value;
    }

    void ThreadMethod()
    {
        __int64 threadCount = 0;

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

void main()
{
    PriorityTest* priorityTest = new PriorityTest();
    ThreadStart* startDelegate = 
        new ThreadStart(priorityTest, &PriorityTest::ThreadMethod);

    Thread* threadOne = new Thread(startDelegate);
    threadOne->Name = "ThreadOne";
    Thread* threadTwo = new Thread(startDelegate);
    threadTwo->Name = "ThreadTwo";

    threadTwo->Priority = ThreadPriority::BelowNormal;
    threadOne->Start();
    threadTwo->Start();

    // Allow counting for 10 seconds.
    Thread::Sleep(10000);
    priorityTest->LoopSwitch = false;
}

[JScript] No example is available for JScript. To view a Visual Basic, C#, or C++ example, click the Language Filter button Language Filter in the upper-left corner of the page.

Requirements

Platforms: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 family, .NET Compact Framework, Common Language Infrastructure (CLI) Standard

See Also

Thread Class | Thread Members | System.Threading Namespace | ThreadPriority | Scheduling Threads

Show:
© 2015 Microsoft