Auf Englisch lesen

Freigeben über


ThreadPriority Enumeration

Definition

Gibt die Planungspriorität eines Thread an.

C#
public enum ThreadPriority
C#
[System.Serializable]
public enum ThreadPriority
C#
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public enum ThreadPriority
Vererbung
ThreadPriority
Attribute

Felder

Name Wert Beschreibung
AboveNormal 3

Der Thread kann anschließend an die Threads mit Highest-Priorität und vor den Threads mit Normal-Priorität geplant werden.

BelowNormal 1

Der Thread kann anschließend an die Threads mit Normal-Priorität und vor den Threads mit Lowest-Priorität geplant werden.

Highest 4

Der Thread kann vor Threads mit jeder anderen Priorität geplant werden.

Lowest 0

Der Thread kann nach Threads mit jeder anderen Priorität geplant werden.

Normal 2

Der Thread kann anschließend an die Threads mit AboveNormal-Priorität und vor den Threads mit BelowNormal-Priorität geplant werden. Threads haben standardmäßig Normal-Priorität.

Beispiele

Das folgende Codebeispiel zeigt das Ergebnis einer Änderung der Priorität eines Threads. Es werden drei Threads erstellt, die Priorität eines Threads ist auf BelowNormal festgelegt, und die Priorität eines zweiten Threads ist auf AboveNormal festgelegt. Jeder Thread erhöht eine Variable in einer while Schleife und wird für eine festgelegte Zeit ausgeführt.

C#
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 volatile bool loopSwitch;
    [ThreadStatic] static long threadCount = 0;

    public PriorityTest()
    {
        loopSwitch = true;
    }

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

    public void ThreadMethod()
    {
        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:
//    ThreadOne   with      Normal priority has a count =   755,897,581
//    ThreadThree with AboveNormal priority has a count =   778,099,094
//    ThreadTwo   with BelowNormal priority has a count =     7,840,984

Hinweise

ThreadPriority definiert den Satz aller möglichen Werte für eine Threadpriorität. Threadprioritäten geben die relative Priorität eines Threads gegenüber einem anderen an.

Jeder Thread hat eine zugewiesene Priorität. Threads, die innerhalb der Runtime erstellt werden, erhalten zunächst die Normal Priorität, während Threads, die außerhalb der Runtime erstellt wurden, ihre vorherige Priorität beibehalten, wenn sie in die Runtime gelangen. Sie können die Priorität eines Threads abrufen und festlegen, indem Sie auf seine Priority Eigenschaft zugreifen.

Die Ausführung von Threads wird basierend auf ihrer Priorität geplant. Der Planungsalgorithmus, der zum Bestimmen der Reihenfolge der Threadausführung verwendet wird, variiert je nach Betriebssystem. Das Betriebssystem kann die Threadpriorität auch dynamisch anpassen, wenn der Fokus der Benutzeroberfläche zwischen Vordergrund und Hintergrund verschoben wird.

Die Priorität eines Threads wirkt sich nicht auf den Zustand des Threads aus. der Zustand des Threads muss sein Running , bevor das Betriebssystem ihn planen kann.

Gilt für:

Produkt Versionen
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 2.0, 2.1

Weitere Informationen