SYSLIB0006: Thread.Abort wird nicht unterstützt

Die folgenden APIs sind ab .NET 5 als veraltet markiert. Die Verwendung dieser APIs löst zur Kompilierzeit die Warnung SYSLIB0006 und zur Laufzeit eine PlatformNotSupportedException aus.

Wenn Sie Thread.Abort aufrufen, um einen anderen Thread als den aktuellen Thread zu beenden, wissen Sie nicht, welcher Code ausgeführt wurde oder nicht ausgeführt werden konnte, wenn die ThreadAbortException ausgelöst wird. Sie können sich auch nicht sicher sein, welchen Zustand Ihre Anwendung oder ein Anwendungs- und Benutzerstatus hat, für den sie verantwortlich ist. Beispielsweise kann der Aufruf von Thread.Abort die Ausführung statischer Konstruktoren oder die Freigabe verwalteter oder nicht verwalteter Ressourcen verhindern. Aus diesem Grund löst Thread.Abort in .NET Core und .NET 5 und höher immer eine PlatformNotSupportedException aus.

Problemumgehungen

Verwenden Sie CancellationToken, um die Verarbeitung einer Arbeitseinheit abzubrechen, statt Thread.Abort aufzurufen. Im folgenden Beispiel wird die Verwendung von CancellationToken veranschaulicht.

void ProcessPendingWorkItemsNew(CancellationToken cancellationToken)
{
    if (QueryIsMoreWorkPending())
    {
        // If the CancellationToken is marked as "needs to cancel",
        // this will throw the appropriate exception.
        cancellationToken.ThrowIfCancellationRequested();

        WorkItem work = DequeueWorkItem();
        ProcessWorkItem(work);
    }
}

Unterdrücken einer Warnung

Wenn Sie die veralteten APIs verwenden müssen, können Sie die Warnung im Code oder in Ihrer Projektdatei unterdrücken.

Um nur einen einzelnen Verstoß zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Warnung zu deaktivieren und dann wieder zu aktivieren.

// Disable the warning.
#pragma warning disable SYSLIB0006

// Code that uses obsolete API.
// ...

// Re-enable the warning.
#pragma warning restore SYSLIB0006

Um alle SYSLIB0006-Warnungen in Ihrem Projekt zu unterdrücken, fügen Sie ihrer Projektdatei eine <NoWarn>-Eigenschaft hinzu.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
   ...
   <NoWarn>$(NoWarn);SYSLIB0006</NoWarn>
  </PropertyGroup>
</Project>

Weitere Informationen finden Sie unter Unterdrücken von Warnungen.

Siehe auch