Gets or sets a value indicating the scheduling priority of a thread.
Assembly: mscorlib (in mscorlib.dll)
Public Property Priority As ThreadPriority
public ThreadPriority Priority { get; set; }
public: property ThreadPriority Priority { ThreadPriority get (); void set (ThreadPriority value); }
member Priority : ThreadPriority with get, set
Property Value
Type: System.Threading.ThreadPriorityOne of the ThreadPriority values. The default value is Normal.
| Exception | 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. |
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.
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.
Option Explicit Option Strict Imports System Imports System.Threading Public Class Test <MTAThread> _ 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
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")); } }
using namespace System; using namespace System::Threading; ref class PriorityTest { private: bool loopSwitch; public: PriorityTest() { loopSwitch = true; } property bool LoopSwitch { void set( bool value ) { loopSwitch = value; } } void ThreadMethod() { __int64 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" ) ); } }; int main() { PriorityTest^ priorityTest = gcnew PriorityTest; ThreadStart^ startDelegate = gcnew ThreadStart( priorityTest, &PriorityTest::ThreadMethod ); Thread^ threadOne = gcnew Thread( startDelegate ); threadOne->Name = "ThreadOne"; Thread^ threadTwo = gcnew Thread( startDelegate ); threadTwo->Name = "ThreadTwo"; threadTwo->Priority = ThreadPriority::BelowNormal; threadOne->Start(); threadTwo->Start(); // Allow counting for 10 seconds. Thread::Sleep( 10000 ); priorityTest->LoopSwitch = false; }
.NET Framework
Supported in: 4, 3.5, 3.0, 2.0, 1.1, 1.0.NET Framework Client Profile
Supported in: 4, 3.5 SP1Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.